git submodule
Inclui outros repositórios dentro do seu repositório
O comando 'git submodule' embute outro repositório Git numa pasta sua, fixado num commit exato. Seu repositório registra só qual commit do submódulo usar; o submódulo mantém o próprio histórico. É assim que projetos incluem bibliotecas compartilhadas que não querem copiar. Clonar exige --recurse-submodules (ou git submodule update --init) para buscá-los.
Sinopse
git submodule add <url> [<path>]
git submodule update --init --recursive
git submodule status
git submodule foreach <command>Exemplos
Adicionar uma biblioteca
git submodule add https://github.com/acme/ui.git lib/uiClona-a e registra o commit dela.
Depois de clonar
git submodule update --init --recursiveBuscar todos os submódulos.
Clonar com eles
git clone --recurse-submodules <url>Tudo num passo.
Atualizar para o mais recente
git submodule update --remoteLevar cada submódulo ao último commit do seu branch.
Exemplos de fluxos de trabalho
cd lib/ui && git pullAvançar o submódulo
cd ../.. && git add lib/uiRegistrar o novo commit
git commit -m "Update ui library"Registrar
Solução de problemas
Pasta de submódulo vazia
Causa: Os submódulos não foram buscados
git submodule update --init --recursive
Dicas e armadilhas
Boas práticas
- ✓Configure git config --global submodule.recurse true para o pull e o checkout atualizarem os submódulos.
Erros comuns
- ✗Clonar sem --recurse-submodules e ficar com pastas vazias.
- ✗Commitar dentro de um submódulo com HEAD destacado e perder o trabalho.
- ✗Esquecer de commitar o novo commit do submódulo no repositório pai.
Perguntas frequentes
Só a URL do submódulo (em .gitmodules) e o commit exato que ele usa.