Git worktree ou submodule: escolha pelo histórico
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ão | Worktree | Submodule |
|---|---|---|
| Histórico | Mesmo repositório; objetos e referências compartilhados | Repositório filho separado; pai registra um commit |
| Arquivos | HEAD, índice e diretório próprios | Checkout filho e pins confirmado/preparado podem diferir |
| Versão | Branch ou commit do mesmo repositório | Commit filho selecionado, não apenas .gitmodules |
| Atualização | Revisar e integrar a branch escolhida | Checkout do pin gravado; --remote é outra escolha |
| Limite | Normalmente um checkout por branch; não isola permissões | Suporte 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 listMantenha 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-currentPrimeiro 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 --shortLimites 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 listConfira 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/libraryPerguntas 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.