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 --recursive

Fluxo de Trabalho Crítico

Siga estes 6 passos ao fazer alterações em um submódulo.

1
2
3
4
5
6

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-branch

Quando 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.

Compartilhar esta ferramenta

Reagir:

Avalie este artigo

Seja o primeiro a avaliar

Comentários (0)

Nenhum comentário ainda. Seja o primeiro a comentar!

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.