Git Submodule
Última atualização
Um submódulo incorpora um repositório Git dentro de outro, fixado em um commit específico. O repo pai registra de qual commit do submódulo ele depende, para que todos obtenham a mesma versão. É como você inclui uma biblioteca ou componente compartilhado que vive em seu próprio repositório sem copiar o código dele.
Experimente isto no terminal playground - um shell real no seu navegador, nada para instalar.
Sintaxe
| Command | What it does |
|---|---|
git submodule add <url> libs/x | Adicionar um repo como submódulo em libs/x |
git clone --recurse-submodules <url> | Clonar um repo e seus submódulos |
git submodule update --init --recursive | Inicializar e buscar submódulos após um clone simples |
git submodule update --remote | Atualizar submódulos para o commit mais recente |
git submodule status | Mostrar o commit de cada submódulo |
Casos comuns
| Goal | Command |
|---|---|
| Clonar um projeto que usa submódulos | git clone --recurse-submodules <url> |
| Buscar submódulos depois de já ter clonado | git submodule update --init --recursive |
| Atualizar um submódulo para o mais recente | git submodule update --remote |
Perguntas frequentes sobre git submodule
O que é um git submodule?
Um submódulo é um repositório Git aninhado dentro de outro repositório Git em um commit fixo. O repo pai armazena um ponteiro para esse commit exato em vez dos arquivos do submódulo, de modo que os colaboradores fazem checkout da mesma versão. É usado para incluir uma dependência ou componente compartilhado que tem seu próprio repo e histórico.
Como clono um repositório com submódulos?
Use
git clone --recurse-submodules <url> para clonar o pai e todos os seus submódulos em uma só etapa. Se você já clonou sem essa flag, execute depois git submodule update --init --recursive para preencher as pastas dos submódulos.Como atualizo um submódulo para o commit mais recente?
Execute
git submodule update --remote, que busca a branch rastreada de cada submódulo e o move para o commit mais recente. Depois confirme a mudança no repo pai, já que o pai registra para qual commit do submódulo ele aponta - a atualização só é salva quando você faz commit desse ponteiro.Por que minha pasta de submódulo está vazia após o clone?
Porque você clonou sem
--recurse-submodules, então o Git criou as pastas mas não buscou o conteúdo delas. Corrija com git submodule update --init --recursive, que inicializa e baixa cada submódulo.Posso praticar isto online?
Sim. Abra o terminal playground para executar
git submodule em um shell real no seu navegador - nada para instalar. O curso interativo e gratuito de Git da Coddy também cobre a configuração de repositórios passo a passo.