{"meta":{"title":"À propos des fusions de sous-arborescences Git","intro":"Si vous devez gérer plusieurs projets au sein d’un seul dépôt, vous pouvez utiliser une fusion de sous-arborescence pour gérer toutes les références.","product":"Bien démarrer","breadcrumbs":[{"href":"/fr/get-started","title":"Bien démarrer"},{"href":"/fr/get-started/using-git","title":"Utilisation de Git"},{"href":"/fr/get-started/using-git/about-git-subtree-merges","title":"À propos des fusions de sous-arborescences Git"}],"documentType":"article"},"body":"# À propos des fusions de sous-arborescences Git\n\nSi vous devez gérer plusieurs projets au sein d’un seul dépôt, vous pouvez utiliser une fusion de sous-arborescence pour gérer toutes les références.\n\n## À propos des fusions de sous-arborescences\n\nEn 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.\n\nLa meilleure façon d’expliquer les fusions de sous-arborescences consiste à donner un exemple. Nous allons :\n\n* Créer un référentiel vide appelé `test` qui représente notre projet.\n* Fusionner un autre dépôt dans celui-ci en tant que sous-arborescence appelée `Spoon-Knife`.\n* Le projet `test` utilise ce sous-projet comme s’il faisait partie du même dépôt.\n* Extraire des mises à jour de `Spoon-Knife` dans notre projet `test`.\n\n## Configuration du dépôt vide pour une fusion de sous-arborescence\n\n1. Ouvrez <span class=\"platform-mac\">Terminal</span><span class=\"platform-linux\">Terminal</span><span class=\"platform-windows\">Git Bash</span>.\n\n2. Créez un répertoire et accédez-y.\n\n   ```shell\n   mkdir test\n   cd test\n   ```\n\n3. Initialisez un nouveau dépôt Git.\n\n   ```shell\n   $ git init\n   > Initialized empty Git repository in /Users/octocat/tmp/test/.git/\n   ```\n\n4. Créez et commitez un nouveau fichier.\n\n   ```shell\n   $ touch .gitignore\n   $ git add .gitignore\n   $ git commit -m \"initial commit\"\n   > [main (root-commit) 3146c2a] initial commit\n   >  0 files changed, 0 insertions(+), 0 deletions(-)\n   >  create mode 100644 .gitignore\n   ```\n\n## Ajout d’un nouveau dépôt en tant que sous-arborescence\n\n1. Ajoutez une nouvelle URL distante pointant vers le projet distinct qui nous intéresse.\n\n   ```shell\n   $ git remote add -f spoon-knife https://github.com/octocat/Spoon-Knife.git\n   > Updating spoon-knife\n   > warning: no common commits\n   > remote: Counting objects: 1732, done.\n   > remote: Compressing objects: 100% (750/750), done.\n   > remote: Total 1732 (delta 1086), reused 1558 (delta 967)\n   > Receiving objects: 100% (1732/1732), 528.19 KiB | 621 KiB/s, done.\n   > Resolving deltas: 100% (1086/1086), done.\n   > From https://github.com/octocat/Spoon-Knife\n   >  * [new branch]      main     -> Spoon-Knife/main\n   ```\n\n2. Fusionnez le projet `Spoon-Knife` dans le projet Git local. Cela ne modifie pas vos fichiers localement, mais prépare Git à l’étape suivante.\n\n   Si vous utilisez Git 2.9 ou version ultérieure :\n\n   ```shell\n   $ git merge -s ours --no-commit --allow-unrelated-histories spoon-knife/main\n   > Automatic merge went well; stopped before committing as requested\n   ```\n\n   Si vous utilisez Git 2.8 ou version antérieure :\n\n   ```shell\n   $ git merge -s ours --no-commit spoon-knife/main\n   > Automatic merge went well; stopped before committing as requested\n   ```\n\n3. Créez un répertoire appelé **spoon-knife** et copiez-y l’historique Git du projet `Spoon-Knife`.\n\n   ```shell\n   $ git read-tree --prefix=spoon-knife/ -u spoon-knife/main\n   > fatal: refusing to merge unrelated histories\n   ```\n\n4. Commitez les modifications pour les maintenir en sécurité.\n\n   ```shell\n   $ git commit -m \"Subtree merged in spoon-knife\"\n   > [main fe0ca25] Subtree merged in spoon-knife\n   ```\n\nBien 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.\n\n> \\[!TIP]\n> 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`](/fr/get-started/git-basics/managing-remote-repositories).\n\n## Synchronisation avec des mises à jour et des modifications\n\nLorsqu’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 :\n\n```shell\ngit pull -s subtree REMOTE-NAME BRANCH-NAME\n```\n\nPour l’exemple ci-dessus, il s’agit de :\n\n```shell\ngit pull -s subtree spoon-knife main\n```\n\n## Pour aller plus loin\n\n* [Chapitre « Fusion avancée » du livre *Pro Git*](https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging)\n* ```\n            [Comment utiliser la stratégie de fusion de sous-arborescence](https://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html)\n  ```"}