Une branche unique d'un autre dépôt peut facilement être placée dans un sous-répertoire conservant son historique. Par exemple :
git subtree add --prefix=rails git://github.com/rails/rails.git master
Cela apparaîtra comme un commit unique où tous les fichiers de la branche master de Rails seront ajoutés dans le répertoire "rails". Cependant, le titre du commit contient une référence à l'ancien arbre historique :
Ajouter 'rails/' au commit <rev>
Dónde <rev>
est un hachage d'engagement SHA-1. Vous pouvez toujours voir l'historique, en accusant certains changements.
git log <rev>
git blame <rev> -- README.md
Notez que vous ne pouvez pas voir le préfixe du répertoire d'ici puisqu'il s'agit d'une ancienne branche laissée intacte. Vous devez traiter ce commit comme un déplacement de fichier habituel : vous aurez besoin d'un saut supplémentaire pour l'atteindre.
# finishes with all files added at once commit
git log rails/README.md
# then continue from original tree
git log <rev> -- README.md
Il existe des solutions plus complexes, comme le faire manuellement ou réécrire l'historique, comme décrit dans d'autres réponses.
La commande git-subtree fait partie de git-contrib officiel, certains gestionnaires de paquets l'installent par défaut (OS X Homebrew). Mais il se peut que vous deviez l'installer vous-même en plus de git.
17 votes
Si vous essayez simplement de combiner deux dépôts en un seul, sans avoir besoin de conserver les deux dépôts, jetez un coup d'œil à cette question : stackoverflow.com/questions/13040958/
0 votes
Pour fusionner le repo git dans un répertoire personnalisé en sauvegardant tous les comits, utilisez stackoverflow.com/a/43340714/1772410