git submodule

Espaços de trabalho e projetos grandes

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>
[ ] opcional| ou<arg> valor a substituir... repetível--flag opção

Exemplos

Adicionar uma biblioteca

git submodule add https://github.com/acme/ui.git lib/ui

Clona-a e registra o commit dela.


Depois de clonar

git submodule update --init --recursive

Buscar todos os submódulos.


Clonar com eles

git clone --recurse-submodules <url>

Tudo num passo.


Atualizar para o mais recente

git submodule update --remote

Levar cada submódulo ao último commit do seu branch.

Exemplos de fluxos de trabalho

1
cd lib/ui && git pull

Avançar o submódulo

2
cd ../.. && git add lib/ui

Registrar o novo commit

3
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

A:

Só a URL do submódulo (em .gitmodules) e o commit exato que ele usa.