J'ai un superprojet git qui fait référence à plusieurs sous-modules et j'essaye de verrouiller un flux de travail pour le reste des membres de mon projet.
Pour cette question, disons que mon superprojet est appelé supery
et que le sous-module est appelé subby
. (Ensuite, c'est une simplification de ce que j'essaie de faire ... Je n'utilise pas réellement les branches pour les versions, mais j'ai pensé que ce serait plus facile de poser une question.)
Ma branche principale de supery
a la balise v1.0
du projet git subby
référencée en tant que sous-module. La branche de supery
appelé one.one
et a changé la référence du sous-module pour pointer vers la balise v1.1
de subby
.
Je peux travailler dans chacune de ces branches sans accroc, mais si j'essaie de mettre à jour la one.one
branche avec des modifications de la master
branche, je reçois des conflits et je ne sais pas comment les résoudre.
Fondamentalement, après avoir exécuté un git pull . master
certain temps dans la subby
branche, il semble que cela crée des sous-modules supplémentaires.
Avant le pull / merge, j'obtiens la réponse souhaitée 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 l'extraction, il ajoute des sous-modules supplémentaires lorsque je lance 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 supprimer / ignorer les références de sous-modules indésirables et valider mes conflits et modifications? Ou y a-t-il un paramètre que je peux utiliser avec mon original git pull
qui ignorera mes sous-modules?
la source
added by us: ../Mono.Cecil
dansgit status
maisgit add
et j'aigit rm
échoué avecMono.Cecil: needs merge, pathspec 'Mono.Cecil/' did not match any files
parce que c'était juste un dossier vide et que git ne gère vraiment que les fichiers.git checkout
m'a donnéMono.Cecil: needs merge, error: you need to resolve your current index first
,git submodule update
donnéSkipping unmerged submodule Mono.Cecil
etgit checkout master Mono.Cecil
finalement réparé. Problème de base: lagit status
suggestion est fausse, alors choisissez une branche et prenez sa copie du dossier aveccheckout
!git checkout --ours SUBMOD
etgit add SUBMOD
et d' autres, mais finalement faisant ,git checkout master SUBMOD
résolu le conflit. Ce commentaire devrait probablement être une réponse, pas un commentaire ... :)Eh bien, il ne gère pas techniquement les conflits avec les sous-modules (c'est-à-dire: gardez ceci mais pas cela), mais j'ai trouvé un moyen de continuer à travailler ... et tout ce que j'avais à faire était de faire attention à ma
git status
sortie et de réinitialiser les sous-modules:Cela réinitialiserait le sous-module à la validation de pré-extraction. Ce qui dans ce cas est exactement ce que je voulais. Et dans d'autres cas où j'ai besoin que les modifications soient appliquées au sous-module, je traiterai celles avec les flux de travail de sous-module standard (checkout master, déroulez la balise souhaitée, etc.).
la source
J'ai eu un peu de mal avec les réponses à cette question et je n'ai pas eu beaucoup de chance avec les réponses dans un article similaire de SO . C'est donc ce qui a fonctionné pour moi - en gardant à l'esprit que dans mon cas, le sous-module était maintenu par une équipe différente, le conflit provenait donc de différentes versions de sous-module en master et de ma branche locale du projet sur lequel je travaillais:
git status
- notez le dossier du sous-module avec des conflitsRéinitialisez le sous-module à la dernière version validée dans la branche actuelle:
git reset HEAD path/to/submodule
À ce stade, vous disposez d'une version sans conflit de votre sous-module que vous pouvez maintenant mettre à jour vers la dernière version dans le référentiel du sous-module:
Et maintenant vous pouvez
commit
cela et retourner au travail.la source
Tout d'abord, recherchez le hachage que vous souhaitez référencer dans votre sous-module. puis courir
cela a fonctionné pour moi pour obtenir mon sous-module à la référence de hachage correcte et continuer mon travail sans avoir d'autres conflits.
la source
J'ai eu ce problème avec
git rebase -i origin/master
une succursale. Je voulais prendre la version maître du sous-module ref, alors j'ai simplement fait:git reset master path/to/submodule
puis
git rebase --continue
Cela a résolu le problème pour moi.
la source
J'ai obtenu de l'aide de cette discussion. Dans mon cas, le
a travaillé pour moi :)
la source
Eh bien, dans mon répertoire parent, je vois:
Alors je viens de faire ça
la source