Guia Interativo de Git Submodules
Domine o fluxo de trabalho de Git Submodules com este guia interativo. Aprenda o essencial, o fluxo de trabalho crítico, quando usar e resolver problemas.
O Essencial
Compreenda os 3 pilares fundamentais dos submódulos Git.
1. Repositório dentro de Repositório
Um submódulo é um repositório Git completo aninhado dentro de outro repositório Git. Cada um mantém seu próprio histórico, branches e commits independentes.
2. Ponteiro de Commit
O repositório pai (superprojeto) não armazena os arquivos do submódulo, apenas um ponteiro para um commit específico do repositório do submódulo.
3. Arquivo .gitmodules
Este arquivo rastreia quais submódulos existem, suas URLs remotas e seus caminhos locais. É versionado junto com o superprojeto.
Começando
Ao clonar um repositório com submódulos, você precisa inicializá-los explicitamente:
git clone --recurse-submodules <url-do-repositorio>Ou, se você já clonou sem a flag, inicialize os submódulos posteriormente:
git submodule update --init --recursiveFluxo de Trabalho Crítico
Siga estes 6 passos ao fazer alterações em um submódulo.
Passo 1: Entre no Submódulo e Crie um Branch
Sempre trabalhe em um branch nomeado, nunca em "detached HEAD".
cd ./submodulo
git checkout -b meu-novo-branchQuando Usar Submódulos
Compare submódulos com alternativas populares. Passe o mouse sobre as barras para ver detalhes.
Passe o mouse sobre as barras para ver a descrição de cada métrica.
Referência Rápida
Comandos essenciais e soluções para problemas comuns.
Comandos
add
Adiciona um novo repositório como submódulo.
Flags: -b, --depth, --name
update
Atualiza os submódulos para o commit registrado no superprojeto.
Flags: --init, --recursive, --remote
init
Registra os submódulos do .gitmodules no .git/config local.
Flags: '<'path'>'
status
Mostra o estado atual dos submódulos.
Flags: --cached, --recursive
rm
Remove um submódulo do projeto.
Flags: -f, --cached
sync
Sincroniza as URLs do .gitmodules para o .git/config local.
Flags: --recursive
foreach
Executa um comando em cada submódulo.
Flags: '<'command'>'
Solução de Problemas
modified: '<'path'>' (new commits)
Causa: O commit do submódulo local está à frente do que o superprojeto espera.
Solução: `git add '<'path'>'` e `git commit` (se intencional) OU `git submodule update` (se não intencional).
Diretório do submódulo vazio
Causa: Clonagem realizada sem a flag `--recurse-submodules`.
Solução: `git submodule update --init --recursive`
fatal: reference is not a tree
Causa: O superprojeto aponta para um commit de submódulo que não foi publicado.
Solução: O autor da alteração deve fazer `push` do commit do submódulo.
CONFLICT (submodule)
Causa: Branches do superprojeto que estão a ser mergidos apontam para commits diferentes do submódulo.
Solução: Resolver manualmente: `cd '<'path'>'`, decidir o commit correto, `cd ..`, `git add '<'path'>'`.
Trabalho recente desapareceu
Causa: Commits foram feitos em estado de "detached HEAD".
Solução: `cd '<'path'>'`, `git reflog` para encontrar o commit, `git branch '<'nome'>' '<'hash'>'` para recuperá-lo.
Ainda com Dúvidas sobre Git Submodules?
Aprofunde seu conhecimento. Faça uma pergunta ao nosso Engenheiro Especialista de IA.
Receba as novidades do site
Cadastre-se para receber novidades do site direto no seu email
Não enviaremos spam. Você pode cancelar a inscrição a qualquer momento.