Git School · FluxGit

Git worktree ou submodule: escolha pelo histórico

FluxGit ·

Os blocos são casos diferentes, não um script único. Escolha o caso do seu repositório. Substitua branches, caminhos e VERIFIED_COMMIT antes de usar. Comandos de cancelamento só valem para sua operação ativa; não execute ambas as alternativas.

Resposta curta

Use worktree para outro checkout do mesmo repositório em tarefas paralelas ou revisão de branches. Use submodule quando o pai precisa registrar um commit específico de outro repositório como dependência. Um cria diretório para histórico compartilhado; o outro incorpora um repositório com versões próprias cuja seleção fica registrada no pai.

DecisãoWorktreeSubmodule
HistóricoMesmo repositório; objetos e referências compartilhadosRepositório filho separado; pai registra um commit
ArquivosHEAD, índice e diretório própriosCheckout filho e pins confirmado/preparado podem diferir
VersãoBranch ou commit do mesmo repositórioCommit filho selecionado, não apenas .gitmodules
AtualizaçãoRevisar e integrar a branch escolhidaCheckout do pin gravado; --remote é outra escolha
LimiteNormalmente um checkout por branch; não isola permissõesSuporte incompleto em vários worktrees; trabalho filho separado

Exemplo e condições

Determine primeiro quem mantém o histórico. Dois agentes testando correções para o mesmo aplicativo normalmente precisam de branches e árvores separadas. Uma biblioteca com lançamentos próprios pode precisar de pin. Nenhum mecanismo é sandbox de permissões: acessos de arquivos e agentes precisam de controles separados.

Inspecione antes de alterar

Worktree vinculado possui HEAD, índice e arquivos próprios, compartilhando objetos e a maioria das referências. Você pode revisar outra branch sem trocar seu checkout atual. Git normalmente impede a mesma branch em dois worktrees. Compartilhar objetos não copia automaticamente alterações não preparadas para o outro diretório.

git status --short
git branch --show-current
git worktree list

Mantenha referência ou checkout separado

Inspecione status e crie review/worktree em ../topic-review. Use git -C para conferir aquele checkout e comparar commits antes de integrar o resultado escolhido. Diretórios separados reduzem mistura de tarefas, mas não tornam alterações compatíveis. Verifique a integração e evite duas ferramentas modificando simultaneamente o mesmo checkout.

git worktree add -b review/worktree ../topic-review HEAD
git -C ../topic-review status --short
git -C ../topic-review branch --show-current

Primeiro fluxo

Submódulo é outro repositório dentro de uma rota do pai. A árvore confirmada do pai grava um gitlink, normalmente modo 160000, para um commit filho. O índice pode preparar outro pin e o checkout filho diferir dos dois. .gitmodules descreve caminho e URL; o commit registrado escolhe a versão.

Escolha o outro resultado deliberadamente

Para deps/library, confira submodule status, o gitlink de HEAD do pai, o gitlink preparado e HEAD do filho separadamente. Pull no pai pode atualizar o pin sem mover o filho. Submodule update consome a seleção registrada; --remote segue uma seleção remota deliberada, outra decisão de versão, não uma limpeza de status.

git submodule status -- deps/library
git ls-tree HEAD -- deps/library
git ls-files --stage -- deps/library
git -C deps/library rev-parse HEAD
git --no-optional-locks -C deps/library status --short

Limites e exceções

Git documenta suporte incompleto a submódulos em múltiplos worktrees. --recursive não torna qualquer combinação um ambiente isolado suportado. Confira limites e o fluxo real de checkout e atualização; considere clone separado para estado independente. Esta comparação não é uma receita universal de automação para combinar os dois mecanismos.

Conflitos e limpeza

Antes de remover um worktree, confira arquivos locais e branch e use worktree remove, sem apagar a pasta às cegas. Preserve a branch útil ou integração revisada. Antes de mudar um pin, confirme e publique a alteração filha pelo fluxo daquele repositório, para outros clones obtê-la; depois registre a seleção no pai.

git -C ../topic-review status --short
git worktree remove ../topic-review
git worktree list

Confira o resultado

Em worktrees, confira branch, status e resultado integrado. Em submódulos, compare os três estados e confirme que o público pretendido consegue obter o objeto filho. Pai limpo não garante filhos limpos. Nenhum mecanismo conserva backup permanente de arquivos sem commit; a verificação depende de sua relação entre históricos.

git worktree list
git submodule status -- deps/library

Perguntas frequentes

Por que worktree? Para outra branch sem substituir o checkout atual. Quando submodule? Para dependência com versões próprias fixada no pai. Por que evitá-los? Suas regras de atualização custam coordenação. Gerenciador de pacotes, vendoring, subtree ou clone separado são alternativas conforme propriedade e entrega, não um vencedor universal.

Revise a operação no FluxGit

Use o histórico visual e a visão de alterações do FluxGit para revisar a operação e os commits relevantes. Mantenha as verificações de branch, compartilhamento e arquivos locais do exemplo. A página de download apresenta os builds e plataformas disponíveis.

Referências oficiais do Git

Fluxos relacionados

Baixar FluxGit