2010-04-20 8 views
0

Alors, je pense avoir la configuration centralisée suivante avec Git (chacun d'entre eux sont des clones):Clones à plusieurs niveaux avec Git?

stable 
    development 
    developer1 
    developer2 
    developer3 

Alors, je crée mon dépôt stable

git --bare init 

fait le 'développement' clone

git clone ssh://host.name//path/to/stable/project.git development 

et a fait un clone 'développeur'

git clone ssh://host.name//path/to/development/project.git developer 

Donc, maintenant, je fais un changement, COMMIT et je pousse de mon compte développeur

git commit --all 
git push 

et le changement va au clone de développement. Mais maintenant, quand je ssh vers le serveur, allez dans le répertoire clone de développement, et exécutez "git fetch" ou "get pull", je ne vois pas les changements.

Alors qu'est-ce que je fais? Est-ce que je suis totalement en train de mal comprendre les choses et de faire les choses de travers? Comment puis-je voir les changements dans le clone 'développement' que j'ai poussé de mon clone 'développeur'? Cela a bien fonctionné à Mercurial.

Répondre

4

Je pense que vous confondez la terminologie et/ou la méthodologie entre Git et Mercurial. Ce que je pense que vous recherchez est juste un flux de travail de branchement standard pour votre équipe. Un référentiel, plusieurs branches avec une hiérarchie implicite.

Ceux-ci devraient aider:

Rappelez-vous, tous ceux-ci sont contenus dans un référentiel, mais offrent des versions différentes de la même code. Appliquez de bonnes pratiques de branchement et de fusion et vous pourrez facilement gérer des branches individuelles, de développement de lignes principales et stables. Cela facilitera également le maintien des versions antérieures tout en se développant pour le futur.


En guise de suivi à ce dernier lien, vous pouvez jeter un oeil à gitflow, une extension git qui fournit une API facile à son modèle proposé.


Et enfin pour résoudre les problèmes que vous rencontrez dans votre post initial, les multiples clones obtiennent exactement les mêmes informations, mais dans des répertoires nommés différemment. Chaque développeur doit cloner une copie du référentiel, effectuer des validations sur la branche de développement, puis fusionner et transférer ces modifications dans le référentiel hébergé centralement. Ensuite, lorsque vous êtes prêt, demandez à un développeur de fusionner la branche de développement dans l'étable et de la transférer dans le référentiel hébergé centralement.En ce qui concerne la raison pour laquelle vos modifications ne sont pas reflétées, c'est parce que vous avez probablement un clone complet du référentiel sur votre serveur plutôt qu'un simple référentiel. Un référentiel nu ne montre aucun des fichiers source, seulement les internes git. Vous ne devriez pas faire d'opérations git dans ce répertoire. Tout le travail devrait être fait sur les versions clonées.

Tout cela semble probablement incroyablement compliqué pour quelqu'un qui est nouveau à git et de passer d'un DVCS différent avec des pratiques différentes. Je recommande fortement d'utiliser un service hébergé gratuit comme GitHub initialement. Il ya divers guides on GitHub qui aident à la fois avec Git et l'utilisation de GitHub et vous obtiendrez une interface utilisateur web agréable.

+0

Les tutoriels ont aidé, et j'ai joué avec les choses et compris ce que je veux faire. J'utiliserai un référentiel central, je ferai des clones pour le 'développement' et le 'développeur', et je ferai un déploiement de type Rails pour la publication (plutôt que de passer à stable quand je veux sortir). –