48 votes

Comment combiner deux branches de deux référentiels différents dans un même référentiel?

Les structures de mes dépôts Git ressembler à ceci:

A-B-C-D-E-F   # master branch in separate repo1
A-B-C-D-E-G-H # master branch in separate repo2

A-H sont simples s'engage. Comme vous pouvez le voir les dépôts sont liés (repo2 est un fork de repo1). J'essaie de combiner ces deux référentiels en un.

Ensuite, le référentiel unique doit avoir la structure suivante:

A-B-C-D-E-F   # master branch of previous repo1
        \
         \
          G-H # master branch of previous repo2

J'ai déjà passé beaucoup de temps à lire le Git Guide de l'Utilisateur et ainsi de suite. Cependant, cette (spécial) cas d'utilisation ne semble pas être documenté n'importe où.

72voto

Peter Burns Points 17420

Vous pouvez traiter un autre référentiel Git sur le même système de fichiers comme un référentiel distant.

Dans le premier, procédez comme suit:

 git remote add <name> /path/to/other/repo/.git
git fetch <name>
git branch <name> <name>/master #optional
 

Maintenant, ils sont les deux branches dans un seul référentiel. Vous pouvez basculer entre eux avec git checkout, fusionner avec git merge, etc.

7voto

Jim Puls Points 29289

Votre image suggère que vous ne voulez pas vraiment "combiner les deux référentiels", mais bien fusionner G et H dans repo1. Vous devriez pouvoir faire quelque chose d'aussi simple que d'ajouter repo2 en tant que télécommande pour repo1 et récupérer / extraire les modifications.

4voto

Pistos Points 8997

Je pense que Jim a raison. Gardez également à l'esprit que si deux commits font exactement le même patch / diff contre le code, ils auront exactement le même hachage SHA1. Donc, de A à E devraient avoir le même SHA1 dans les deux pensions, de sorte que la fusion de l'un à l'autre ne devrait pas poser de problème, et que le référentiel fusionné soit le seul référentiel permettant d'aller de l'avant.

Vous pouvez configurer sur repo1 une branche de suivi pour repo2, puis les conserver de manière distincte et retarder la fusion à chaque fois que vous le souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X