Quais são as diferenças conceituais entre o uso do submódulo git e da subárvore?
Quais são os cenários típicos para cada um?
Quais são as diferenças conceituais entre o uso do submódulo git e da subárvore?
Quais são os cenários típicos para cada um?
Respostas:
E se eu quiser que os links sempre aponte para o HEAD do repositório externo?
Você pode criar um submódulo para seguir o HEAD de uma ramificação de um repositório remoto do submódulo, com:
o git submodule add -b <branch> <repository> [<path>]
. (para especificar um ramo a seguir)
o git submodule update --remote
que atualizará o conteúdo do submódulo para o HEAD mais recente <repository>/<branch>
, por padrão origin/master
. Seu projeto principal ainda acompanhará os hashes do HEAD do submódulo, mesmo que --remote
seja usado.
add -b
e --remote
depois nos comandos de atualização, conforme a documentação de atualização do submódulo . Nesse caso, ainda é -b
realmente necessário seguir o HEAD do mestre?
-b
é usado para gerar os metadados .gitmodule corretos para o submódulo (é equivalente a a git config -f .gitmodules submodule.<path>.branch <branch>
).
--remote
- --remote
funciona também se -b
não tiver sido usada add
. Em ambos os casos, a atualização causará uma confirmação no repositório pai que hospeda o submódulo, portanto os links nem sempre "apontam para o HEAD" de uma maneira muito automática ... ou eu não entendi ou essa reivindicação melhor ser removido da resposta original (?)
A diferença conceitual é:
Com os submódulos git, você normalmente deseja separar um repositório grande em outros menores. A maneira de referenciar um submódulo é no estilo maven - você está referenciando um único commit do outro repositório (submódulo). Se você precisar de uma alteração no submódulo, precisará fazer uma confirmação / envio dentro do submódulo, faça referência ao novo commit no repositório principal e, em seguida, confirme / envie a referência alterada do repositório principal. Dessa forma, você precisa ter acesso aos dois repositórios para a compilação completa.
Com a subárvore git, você integra outro repositório ao seu, incluindo seu histórico. Portanto, depois de integrá-lo, o tamanho do seu repositório provavelmente é maior (portanto, essa não é uma estratégia para manter os repositórios menores). Após a integração, não há conexão com o outro repositório e você não precisa de acesso a menos que queira obter uma atualização. Portanto, essa estratégia é mais para reutilização de código e histórico - eu pessoalmente não a uso.
git subtree
você ainda pode também empurrar - se você quisesse - certo?
O submódulo que
envia um repositório principal para um controle remoto não envia os arquivos do submódulo
subárvore
empurrando um repositório principal para remoto empurra arquivos da subárvore
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master