Skip to main content

À propos des fusions de sous-arborescences Git

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.

Platform navigation

À 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 projet test.

Configuration du dépôt vide pour une fusion de sous-arborescence

  1. Ouvrez TerminalTerminalGit Bash.

  2. Créez un répertoire et accédez-y.

    mkdir test
    cd test
    
  3. Initialisez un nouveau dépôt Git.

    $ git init
    > Initialized empty Git repository in /Users/octocat/tmp/test/.git/
    
  4. 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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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

Pour aller plus loin

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy