2009-10-11 5 views
0

Je suis un heureux utilisateur de Github. Au fil du temps, j'ai accumulé un certain nombre de petites repos repos jouet. Je voudrais maintenant créer un repo de conteneur - appelez-le parc, tirez mes divers projets de jouet sous le parc de parent comme sous-modules de git, et soufflez à la source des repos de jouet. Les jouets ne devraient vivre que dans le parc. Quand j'ai essayé ceci en utilisant cette recette: http://git.or.cz/gitwiki/GitSubmoduleTutorial J'ai découvert un gros problème. Voyez, je veux complètement les repos et les faire vivre seulement sous le parc. Quand je suis allé de l'avant et a soufflé les repos dans github je n'étais pas capable de suivre les liens dans le parc. Huh?Sous-modules Git. Comment puis-je les rendre entièrement autonomes?

Quelqu'un pourrait-il m'expliquer comment faire? Merci à l'avance

Cheer, Doug

Répondre

3

Un sous-module est un moyen de relier les référentiels ensemble, mais chaque sous-module est son propre référentiel autonome complet. Lorsque vous ajoutez un référentiel en tant que sous-module d'un autre référentiel, vous liez uniquement les référentiels, vous ne déplacez pas les données dans le référentiel parent. Pour cette raison, vous ne pouvez pas supprimer le référentiel qui est le sous-module sans rompre ce lien.

0

Vous pouvez combiner vos différents référentiels dans un seul référentiel, mais pas avec les sous-modules. Bien que la méthode que je puisse suggérer la dose ait un sérieux inconvénient. Après avoir fusionné vos projets de jouets, ils n'agissent plus comme des projets séparés. Vous ne pouvez pas vous engager pour un seul projet, vous devez les valider tous en même temps. De même, vous ne pouvez pas brancher un seul projet, chaque branche est une branche de tous les projets. Donc, si vous avez utilisé plusieurs branches ou s'il y a des chances que vous souhaitiez brancher un projet individuel dans le futur, alors gardez des dépôts séparés.

Si après tout ce que vous voulez encore fusionner vos différents dépôts, vous pouvez utiliser une partie de l'idée de how to use the subtree merge strategy. Bien que vous n'ayez pas l'intention de conserver les anciens dépôts, vous n'aurez jamais besoin d'utiliser la fusion de sous-arborescence.

Le bit important du document de stratégie de fusion de sous-arbre sont les commandes suivantes, que vous devez courir à partir du nouveau dépôt de conteneurs:

$ git remote add -f Bproject /path/to/B 
$ git merge -s ours --no-commit Bproject/master 
$ git read-tree --prefix=dir-B/ -u Bproject/master 
$ git commit -m "Merge B project as our subdirectory" 

Puisque vous allez supprimer le référentiel d'origine, vous pouvez également supprimer le À distance, vous avez ajouté au début pour ne pas encombrer les choses.

$ git remote rm Bproject 

À ce stade, votre référentiel de conteneur contient le projet Bproject. Vous pouvez répéter ces étapes pour fusionner dans des projets supplémentaires. Cependant, comme je l'ai déjà mentionné, seule la branche maîtresse a été fusionnée, toutes les autres branches de vos projets ne seront pas fusionnées.

Questions connexes