/ / A atualização do submódulo git pode ser feita para buscar tags em submódulos? - git, git-submodules, git-tag

A atualização do submódulo git pode ser feita para buscar tags em submódulos? - git, git-submodules, git-tag

Eu tenho um repositório git que usa um sub-módulo que eu gostaria de apontar para uma tag anotada, mas quando eu faço git submodule update novas tags não são obtidas. Eu posso obter novas tags no submódulo digitando o submódulo e fazendo um git fetch --tags lá, mas eu realmente gostaria de fazer tudo isso do lado de fora como está escrito.

Eu não consigo encontrar nada na documentação do git sugerindo uma maneira de obter git submodule update para incluir tags (minha versão git é 1.7.3.5).

Obviamente, há outra possibilidade - apontar o submódulo no commit para o qual a tag aponta, e não a tag em si, mas isso não parece tão legal.

Existe uma maneira de obter git submodule update incluir tags?

Respostas:

7 para resposta № 1

git submodule é implementado como um shell script, então é fácil ver o que ele está fazendo - pode ser /usr/lib/git-core/git-submodule se você está usando uma versão empacotada. Essencialmente, apenas roda git-fetch no submódulo se o nome do objeto (SHA1sum) armazenado na árvore do projeto principal não corresponder à versão retirada no submódulo, como Koraktor aponta.

o documentação para git fetch (ou man git-fetch enquanto kernel.org is down) diz que deve buscar cada tag que aponta para um objeto baixado, e os objetos baixados incluirão todo commit que é um ancestral de cada branch que foi buscado. Isso significa que é surpreendente para mim que você não tenha todas as tags relevantes em um git submodule update.

Se é o caso que o que você realmente quer é que seu script seja tentar definir uma nova versão do submódulo e confirmar esse resultado, eu não acho que git submodule update é a ferramenta que você quer - que é só paracertificando-se de que seus submódulos estão na versão correta com base no que está atualmente no commit do projeto principal. Em vez disso, você deve apenas fazer algo como:

( cd my-submodule && 
git fetch && 
git fetch --tags && 
git checkout my-tag )
git add my-submodule
git commit -m "Update the submodule to the "my-tag" version" my-submodule

(Eu adicionei um extra git fetch --tags apenas no caso de sua tag não é aquela que aponta para um commit baixado.

Obviamente, há outra possibilidade - apontar o submódulo no commit para o qual a tag aponta, e não a tag em si, mas isso não parece tão legal.

Bem, a única coisa que é armazenada na árvore do projeto principal para o submódulo é apenas o hash do objeto commit, portanto, mesmo que houvesse um comando que dizia "configure meu submódulo para a tag my-tag nesse submódulo ", acabaria armazenando o hash correspondente a essa tag ...


13 para resposta № 2

Resposta tardia aqui, mas estou surpreso que ninguém mencionou git submodule foreach. Esta é basicamente a maneira como resolvi o problema exato que você encontrou:

git submodule foreach --recursive "git fetch --tags"
git submodule update --recursive

--recursive flag está lá para recorrer a submódulos filho.


3 para resposta № 3

git submodule update Não obtém nada se os seus submódulos estiverem atualizados. Portanto, isso pode ser um equívoco.

git submodule update trará o conteúdo do diretório de trabalho dos submódulos em seu repositório para o estado definido (ou seja, verifique a sub-configuração de sub-módulos que foi definida em seu repositório).

Uma maneira melhor seria cd em seu sub-módulo (que é um repositório Git em si) e simplesmente execute git fetch --tags e depois git checkout some-tag. Depois disso, o submódulo foi atualizado em seu diretório de trabalho para some-tag e você pode encenar isso para cometer.


0 para a resposta № 4

você pode roteirizar para que você faça um (cd path-to-submod && git fetch)

Enrolar os comandos entre parênteses coloca o ambiente em um subshell, ou seja, você não tem que voltar para onde estava.

Espero que isto ajude