Eu tenho um superprojeto git que faz referência a vários submódulos e estou tentando bloquear um fluxo de trabalho para o restante dos membros do meu projeto trabalharem.
Para esta pergunta, digamos que meu superprojeto seja chamado supery
e o submódulo seja chamado subby
. (Em seguida, há uma simplificação do que estou tentando fazer ... Na verdade, não estou usando as ramificações para versões, mas achei que seria mais fácil definir como uma pergunta.)
Minha ramificação principal de supery
tem a tag v1.0
do projeto git subby
referenciada como um submódulo. A ramificação de supery
chamada one.one
e alterou a referência do submódulo para apontar para a tag v1.1
de subby
.
Posso trabalhar em cada uma dessas ramificações sem problemas, mas se tentar atualizar a one.one
ramificação com alterações da master
ramificação, recebo alguns conflitos e não sei como resolvê-los.
Basicamente, depois de executar um git pull . master
tempo no subby
ramo, parece que ele cria submódulos adicionais.
Antes do pull / mesclar, recebo a resposta desejada git submodule
da one.one
ramificação:
$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)
Mas após a atração, ele adiciona submódulos adicionais quando executo 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)
Como faço para excluir / ignorar as referências indesejadas do sub-módulo e confirmar meus conflitos e alterações? Ou existe um parâmetro que eu possa usar com o meu original git pull
que ignorará meus submódulos?
fonte
added by us: ../Mono.Cecil
emgit status
masgit add
egit rm
falhou comMono.Cecil: needs merge, pathspec 'Mono.Cecil/' did not match any files
porque era apenas uma pasta vazia e git realmente só arquivos alças.git checkout
me deuMono.Cecil: needs merge, error: you need to resolve your current index first
,git submodule update
deuSkipping unmerged submodule Mono.Cecil
egit checkout master Mono.Cecil
finalmente consertou. Problema básico: agit status
sugestão está errada, então escolha um ramo e leve sua cópia da pastacheckout
!git checkout --ours SUBMOD
egit add SUBMOD
e outros, mas fazendo finalmentegit checkout master SUBMOD
resolveu o conflito. Este comentário provavelmente deve ser uma resposta, não comentário ... :)Bem, não é tecnicamente o gerenciamento de conflitos com os submódulos (ou seja: mantenha isso, mas não aquilo), mas eu encontrei uma maneira de continuar trabalhando ... e tudo o que eu precisava fazer era prestar atenção à minha
git status
saída e redefinir os submódulos:Isso redefiniria o submódulo para o commit pré-pull. Que neste caso é exatamente o que eu queria. E em outros casos em que preciso das alterações aplicadas ao submódulo, tratarei daquelas com os fluxos de trabalho padrão do submódulo (mestre de checkout, puxe a tag desejada etc.).
fonte
Eu lutei um pouco com as respostas sobre essa pergunta e também não tive muita sorte com as respostas em um post semelhante no SO . Então, foi isso que funcionou para mim - tendo em mente que, no meu caso, o submódulo foi mantido por uma equipe diferente; portanto, o conflito veio de diferentes versões do submódulo no master e na filial local do projeto em que eu estava trabalhando:
git status
- anote a pasta do submódulo com conflitosRedefina o submódulo para a versão que foi confirmada pela última vez no ramo atual:
git reset HEAD path/to/submodule
Neste ponto, você tem uma versão livre de conflito do seu submódulo que agora pode ser atualizada para a versão mais recente no repositório do submódulo:
E agora você pode fazer
commit
isso e voltar ao trabalho.fonte
Primeiro, encontre o hash que você deseja referenciar no seu submódulo. então corra
que trabalhou para eu obter meu sub-módulo com a referência correta de hash e continuar com meu trabalho sem obter mais conflitos.
fonte
Eu tive esse problema com
git rebase -i origin/master
uma filial. Eu queria pegar a versão mestra do ref do submódulo, então simplesmente:git reset master path/to/submodule
e depois
git rebase --continue
Isso resolveu o problema para mim.
fonte
Obteve ajuda desta discussão. No meu caso, o
trabalhou para mim :)
fonte
Bem, no meu diretório pai, vejo:
Então eu fiz isso
fonte