Ă propos des fusions de sous-arborescences
En rĂšgle gĂ©nĂ©rale, une fusion de sous-arborescence est utilisĂ©e pour contenir un dĂ©pĂŽt au sein dâun dĂ©pĂŽt. Le « sous-dĂ©pĂŽt » est stockĂ© dans un dossier du dĂ©pĂŽt principal.
La meilleure façon dâexpliquer les fusions de sous-arborescences consiste Ă donner un exemple. Nous allons :
- Créer un référentiel vide appelé
test
qui représente notre projet. - Fusionner un autre dépÎt dans celui-ci en tant que sous-arborescence appelée
Spoon-Knife
. - Le projet
test
utilise ce sous-projet comme sâil faisait partie du mĂȘme dĂ©pĂŽt. - Extraire des mises Ă jour de
Spoon-Knife
dans notre projettest
.
Configuration du dépÎt vide pour une fusion de sous-arborescence
-
Ouvrez TerminalTerminalGit Bash.
-
Créez un répertoire et accédez-y.
mkdir test cd test
-
Initialisez un nouveau dépÎt Git.
$ git init > Initialized empty Git repository in /Users/octocat/tmp/test/.git/
-
Créez et commitez un nouveau fichier.
$ touch .gitignore $ git add .gitignore $ git commit -m "initial commit" > [main (root-commit) 3146c2a] initial commit > 0 files changed, 0 insertions(+), 0 deletions(-) > create mode 100644 .gitignore
Ajout dâun nouveau dĂ©pĂŽt en tant que sous-arborescence
-
Ajoutez une nouvelle URL distante pointant vers le projet distinct qui nous intéresse.
$ git remote add -f spoon-knife https://github.com/octocat/Spoon-Knife.git > Updating spoon-knife > warning: no common commits > remote: Counting objects: 1732, done. > remote: Compressing objects: 100% (750/750), done. > remote: Total 1732 (delta 1086), reused 1558 (delta 967) > Receiving objects: 100% (1732/1732), 528.19 KiB | 621 KiB/s, done. > Resolving deltas: 100% (1086/1086), done. > From https://github.com/octocat/Spoon-Knife > * [new branch] main -> Spoon-Knife/main
-
Fusionnez le projet
Spoon-Knife
dans le projet Git local. Cela ne modifie pas vos fichiers localement, mais prĂ©pare Git Ă lâĂ©tape suivante.Si vous utilisez Git 2.9 ou version ultĂ©rieure :
$ git merge -s ours --no-commit --allow-unrelated-histories spoon-knife/main > Automatic merge went well; stopped before committing as requested
Si vous utilisez Git 2.8 ou version antérieure :
$ git merge -s ours --no-commit spoon-knife/main > Automatic merge went well; stopped before committing as requested
-
CrĂ©ez un rĂ©pertoire appelĂ© spoon-knife et copiez-y lâhistorique Git du projet
Spoon-Knife
.$ git read-tree --prefix=spoon-knife/ -u spoon-knife/main > fatal: refusing to merge unrelated histories
-
Commitez les modifications pour les maintenir en sécurité.
$ git commit -m "Subtree merged in spoon-knife" > [main fe0ca25] Subtree merged in spoon-knife
Bien que nous nâayons ajoutĂ© quâun seul sous-projet, un nombre quelconque de sous-projets peut ĂȘtre incorporĂ© dans un dĂ©pĂŽt Git.
Conseil
Si vous crĂ©ez un nouveau clone du rĂ©fĂ©rentiel Ă lâavenir, les rĂ©fĂ©rentiels distants que vous avez ajoutĂ©s ne seront pas créés pour vous. Vous devrez les ajouter Ă nouveau Ă lâaide de la commande git remote add
.
Synchronisation avec des mises Ă jour et des modifications
Lorsquâun sous-projet est ajoutĂ©, il nâest pas automatiquement synchronisĂ© avec les modifications en amont. Vous devez mettre Ă jour le sous-projet avec la commande suivante :
git pull -s subtree REMOTE-NAME BRANCH-NAME
Pour lâexemple ci-dessus, il sâagit de :
git pull -s subtree spoon-knife main