Eu tenho um projeto A que é uma biblioteca e é usado em um projeto B.
Ambos os projetos A e B têm um repositório separado no github, mas dentro de B temos um submódulo de A.
Editei algumas classes na biblioteca, que está no repositório A, pressionei no repositório remoto, para que a biblioteca (repositório A) seja atualizada.
Essas atualizações não refletem na "referência" (o submódulo) que o submódulo refere-se a uma confirmação anterior .... o que devo fazer para atualizar o submódulo no git?
fonte
git submodule update
quando alguém atualizar o projA (você receberá um novo ID de confirmação).git push
?git push <remote> <branch>
, por exemplogit push origin dev
.git submodule update
só funciona sem sinalizadores quando um commit foi puxado (no projeto B) que atualiza os refs para o (s) submódulo (s) em questão (projeto A). Para atualizar o projeto B para fazer referência àHEAD
ramificação de rastreamento remoto do projeto A, faça ogit submodule update --remote --merge
que é mostrado na resposta de Paul Hatcher abaixo.Desde o git 1.8, você pode fazer
Isso atualizará o submódulo para a confirmação remota mais recente. Você precisará confirmar a alteração para que o gitlink no repositório pai seja atualizado
E, em seguida, forneça as alterações, sem isso, a identidade do SHA-1, apontando para o submódulo, não será atualizada e, portanto, a alteração não será visível para mais ninguém.
fonte
git commit
todo mundo ainda não está vendo.On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
modified: SubmoduleA (new commits)
modified: SubmoduleB (new commits)
git add
antes de confirmar.Se você atualizar um submódulo e se comprometer com ele, precisará ir para o repositório de nível contendo ou superior e adicionar a alteração lá.
mostrará algo como:
O fato de o submódulo estar fora de sincronia também pode ser visto com
a saída mostrará:
O sinal de mais indica que o submódulo está apontando para a frente onde o repositório superior espera que aponte.
basta adicionar esta alteração:
e comprometa-o:
Ao empurrar suas alterações, certifique-se de empurrar a mudança no submódulo primeiro e depois empurre a alteração de referência no repositório externo. Dessa forma, as pessoas que atualizam sempre poderão executar com êxito
Mais informações sobre submódulos podem ser encontradas aqui http://progit.org/book/ch6-6.html .
fonte
+
quando executagit submodule
, verifique se inicializou e importou os submódulos. Os comandos para isso sãogit submodule init
egit submodule update
, respectivamente.Versão de linha única
fonte
Algumas das outras respostas recomendam mesclar / confirmar no diretório do submódulo, que o IMO pode se tornar um pouco confuso.
Supondo que o servidor remoto seja nomeado
origin
e desejemos amaster
ramificação do (s) submódulo (s), costumo usar:git submodule foreach "git fetch && git reset --hard origin/master"
Nota: Isso fará uma redefinição definitiva em cada submódulo - se você não quiser, pode mudar
--hard
para--soft
.fonte
Meu projeto deve usar o 'mais recente' para o submódulo. No Mac OSX 10.11, git versão 2.7.1, eu não precisava entrar na minha pasta de submodule para coletar seus commits. Eu apenas fiz um regular
no nível superior e atualizou corretamente meu submódulo.
fonte
A resposta de Andy funcionou para mim escapando $ path:
fonte
'$path'