176 votes

Comment gérer les conflits avec les sous-modules git?

J'ai un git superproject qui fait référence à plusieurs submodules et je suis en train de verrouiller un flux de travail pour le reste de mon projet de travailler à l'intérieur.

Pour cette question, disons que mon superproject est appelé supery et le sous-module est appelé subby. (Puis, est une simplification de ce que je suis en train de faire...je ne suis pas vraiment à l'aide de branches pour les versions, mais j'ai pensé qu'il serait plus facile de poser une question.)

Mon maître branche de l' supery a la balise v1.0 du projet git subby référencé comme un sous-module. La direction générale de l' supery appelés one.one et changé la référence de la sous-module de point à la balise v1.1 de subby.

Je peux travailler à l'intérieur de chacune de ces branches sans accroc, mais si j'essaie de mettre à jour l' one.one de la direction, avec les modifications de l' master de la branche de recevoir certains conflits et je ne sais pas comment le résoudre.

Fondamentalement, après l'exécution de l' git pull . master alors que dans l' subby de la branche, on dirait qu'il crée des submodules.

Avant le tirage/de fusion, je reçois la réponse souhaitée à partir d' git submodule de la one.one branche:

$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)

Mais après le pull, il ajoute des submodules lorsque j'exécute git submodule:

$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e
Automatic merge failed; fix conflicts and then commit the results.

$ git submodule
qw3rty...321e subby (v1.0)
asdfgh...456d subby (v1.1)
zxcvbn...7890 subby (v1.1~1)

Comment puis-je supprimer/ignorer les bruits sous-module de références et de s'engager mes conflits et les changements? Ou est-il un paramètre que je peux l'utiliser avec mon originale git pull qui ignore mon submodules?

126voto

Tyler Points 560

Eh bien, ce n'est pas techniquement la gestion des conflits avec les submodules (c'est à dire: gardez ce mais pas que), mais j'ai trouvé un moyen de continuer à travailler...et tout ce que j'avais à faire était de payer l'attention sur moi - git status de sortie et de réinitialiser les submodules:

git reset HEAD subby
git commit

Que serait réinitialiser le sous-module de pré-pull commettre. Qui dans ce cas est exactement ce que je voulais. Et dans d'autres cas où j'ai besoin, les modifications appliquées à la sous-module, je vais traiter avec la norme sous-module des flux de travail (checkout master, tirer vers le bas la balise de votre choix, etc).

32voto

Jesse Hallett Points 354

Je n'ai pas vu exactement la même erreur avant. Mais j'ai une idée de la difficulté que vous rencontrez. Il ressemble parce que le master et un.l'une des branches de supery contiennent différents refs pour la subby sous-module, lorsque vous fusionnez des modifications de master git ne sais pas qui ref - v1.0 ou v1.1, doit être maintenu et suivis par l'une.une branche de supery.

Si c'est le cas, vous devez alors sélectionner la ref que vous voulez et de s'engager à ce que le changement de résoudre le conflit. Ce qui est exactement ce que vous faites avec la commande de réinitialisation.

C'est un aspect délicat de suivi des différentes versions d'un sous-module dans les différentes branches de votre projet. Mais le sous-module ref est juste comme n'importe quel autre composant de votre projet. Si les deux branches différentes de continuer à suivre les mêmes sous-module refs après une succession de fusions, puis git doit être en mesure de travailler sur le motif sans lever les conflits de fusion des fusions futures. D'autre part, vous si l'interrupteur sous-module refs fréquemment vous pouvez avoir à mettre en place avec beaucoup de résolution de conflits.

20voto

hellatan Points 1013

Commencez par trouver le hash que vous souhaitez référencer dans votre sous-module. puis courir

 ~/supery/subby $ git co hashpointerhere
~/supery/subby $ cd ../
~/supery $ git add subby
~/supery $ git commit -m 'updated subby reference'
 

cela a fonctionné pour moi pour obtenir mon sous-module à la référence de hachage correcte et pour continuer mon travail sans avoir d'autres conflits.

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