Si vous voulez conserver l'historique exact des livraisons du second dépôt et donc conserver la possibilité de fusionner facilement les modifications en amont à l'avenir, voici la méthode que vous voulez. Il en résulte un historique non modifié du sous-arbre qui est importé dans votre dépôt plus un commit de fusion pour déplacer le dépôt fusionné vers le sous-répertoire.
git remote add XXX_remote <path-or-url-to-XXX-repo>
git fetch XXX_remote
git merge -s ours --no-commit --allow-unrelated-histories XXX_remote/master
git read-tree --prefix=ZZZ/ -u XXX_remote/master
git commit -m "Imported XXX as a subtree."
Vous pouvez suivre les changements en amont de la manière suivante :
git pull -s subtree XXX_remote master
Git détermine de lui-même où se trouvent les racines avant de faire la fusion, donc vous n'avez pas besoin de spécifier le préfixe lors des fusions suivantes.
El inconvénient est que dans l'historique fusionné les fichiers ne sont pas fixés (pas dans un sous-répertoire). En conséquence git log ZZZ/a
vous montrera tous les changements (s'il y en a) sauf ceux dans l'historique de la fusion. Vous pouvez le faire :
git log --follow -- a
mais cela ne montrera pas les changements autrement que dans l'historique de la fusion.
En d'autres termes, si vous ne changez pas ZZZ
dans le référentiel XXX
alors vous devez spécifier --follow
et un chemin non fixé. Si vous les changez dans les deux dépôts, alors vous avez 2 commandes, dont aucune ne montre tous les changements.
Versions de Git antérieures à 2.9 : Vous n'avez pas besoin de passer le --allow-unrelated-histories
option pour git merge
.
La méthode de l'autre réponse qui utilise read-tree
et saute le merge -s ours
n'est pas différente de celle qui consiste à copier les fichiers avec cp et à valider le résultat.
La source originale provient de Article d'aide "Subtree Merge" de github . Et un autre lien utile .
2 votes
Sur Github, il est maintenant possible de le faire à partir de l'interface web lorsque vous créez un nouveau dépôt.
0 votes
Duplicata possible de Comment fusionner deux dépôts git ?