Como faço para verificar uma versão específica de um submódulo usando 'submódulo git'?

Respostas:

167

Repositórios de submódulo permanecem em um estado HEAD separado apontando para um commit específico. Mudar esse commit envolve simplesmente fazer check-out de uma tag ou commit diferente e então adicionar a mudança ao repositório pai.

$ cd submodule
$ git checkout v2.0
Previous HEAD position was 5c1277e... bumped version to 2.0.5
HEAD is now at f0a0036... version 2.0

git-status no repositório pai agora relatará uma árvore suja:

# On branch dev [...]
#
#   modified:   submodule (new commits)

Adicione o diretório do submódulo e comprometa-se a armazenar o novo ponteiro.

joemaller
fonte
14
Depois de comprometer o repositório pai com um branch / versão específico de um submódulo, outras pessoas podem fazer checkout da mesma versão do submódulo no futuro? Ou eles precisam especificar manualmente novamente?
QZHua
@QZHua: Eu mesmo experimentei isso e parece que o ID de confirmação do submódulo é preservado quando o pai é clonado.
Psiconauta de
37

Etapa 1: adicione o submódulo

   git submodule add git://some_repository.git some_repository

Etapa 2: Corrija o submódulo para um commit particular

Por padrão, o novo submódulo rastreará o HEAD do branch master, mas NÃO será atualizado conforme você atualiza seu repositório principal. Para alterar o submódulo para rastrear um commit particular ou branch diferente, mude o diretório para a pasta do submódulo e troque os branches como você faria em um repositório normal.

   git checkout -b some_branch origin/some_branch

Agora, o submódulo está fixado no branch de desenvolvimento em vez do HEAD do master.

De Two Guys Arguing - Amarre submódulos Git a um commit ou branch particular .

Fsenart
fonte
20
É mais fácil de usargit submodule add -b some_branch git://some_repository.git some_repository
Caumons,
15
Neste momento não parece que git submodule add -bpode levar uma etiqueta ou um sha1hash. Só pode levar um galho.
CMCDragonkai
Existe um problema para isso no rastreador de problemas Git? Alguém poderia postar um URL para que possamos rastreá-lo? Obrigado.
colan
As instruções @colan para relatar bugs estão em git-scm.com/community . Mas -bo suporte a branches e não tags ou commits é um recurso, não um bug (na verdade, -bé uma abreviação de --branch).
Henry
1
Suspiro. Depois de todos esses anos, eles ainda não têm um rastreador de problemas público.
colan