Featured image of post Qual é a Diferença Entre Desenvolver com Git Worktree e Git Branch? Quando Você Deve Usar o Git Worktree?

Qual é a Diferença Entre Desenvolver com Git Worktree e Git Branch? Quando Você Deve Usar o Git Worktree?

No meio do desenvolvimento de uma nova funcionalidade e de repente precisa corrigir um bug? Cansado de ambientes bagunçados e sobras de builds? Este artigo mostra como o Git Worktree atua como a abertura de uma 'filial', permitindo um verdadeiro desenvolvimento paralelo e isolamento do ambiente para que o seu fluxo de trabalho não seja interrompido!

Você está no meio do desenvolvimento de uma nova funcionalidade quando o chefe aparece de repente com um bug urgente para consertar. O que você faz?

A maioria das pessoas provavelmente usaria git stash para empurrar o código escrito pela metade para uma gaveta, e então trocaria de branch para corrigir o bug.

Mas e se as suas alterações envolverem configurações de ambiente massivas, ou se a troca de branches fizer com que o node_modules e os Artefatos de Build (Build Artifacts) se contaminem mutuamente? Só isso já é suficiente para dar vontade de quebrar o teclado.

É aqui que o Git Worktree entra para salvar o dia!

O Que é Git Worktree?

Você pode pensar no funcionamento do Git como “reformar uma casa”.

Com o tradicional git branch, quando você troca de branch, todos os móveis do cômodo desaparecem instantaneamente diante de seus olhos e se reorganizam automaticamente para se adequar a outra tarefa.

Embora economize espaço, a desvantagem é a “contaminação do ambiente”. Você tem que guardar a louça suja no armário antes de poder trocar; e depois de trocar, o cheiro de gordura da obra anterior ainda pode ficar no ar.

Por outro lado, o Git Worktree é como construir diretamente uma casa idêntica no terreno baldio ao lado.

Simplificando, o princípio fundamental do Git é:

“Uma alma (banco de dados .git), múltiplos corpos (diretórios de trabalho).”

Você pode ter simultaneamente uma “filial de desenvolvimento de funcionalidades” e uma “filial de reparos de emergência”. Sua mão esquerda escreve a lógica de IA na Janela A, enquanto sua mão direita conserta bugs na Janela B, sem que um lado interfira no outro. Isso sim é verdadeiro desenvolvimento paralelo.

Guia Prático do Worktree

Para manter o seu estado de fluxo (flow) durante o desenvolvimento, a estrutura de diretórios e a configuração do ambiente são fundamentais.

1. Gerenciamento Paralelo de Diretórios: Não Construa Filiais Dentro da Sede

Muitas pessoas que estão usando o Worktree pela primeira vez criam o novo diretório de forma desajeitada dentro da pasta original do projeto. Nunca faça isso! Isso lançará o Git em uma bagunça recursiva infinita. A maneira correta de construir um Git Worktree é:

Coloque a sede (main) e a filial da tarefa (feature) paralelas uma à outra.

# Execute a criação do Worktree a partir da sede, mas coloque o diretório do Worktree fora do diretório original do projeto
git worktree add ../my-app-feat-ai dev-branch

A sua estrutura de diretórios deve ficar mais ou menos assim:

- my-project/       # Pacote maciço
  - main-repo/      # Sede estável
  - feat-ai-search/ # Nova filial em construção

2. Isolamento da Configuração do Ambiente: Dê a Cada Filial a Sua Própria Alma

Como os diretórios do projeto estão separados, os seus arquivos de configuração .env também podem ser separados.

Você pode conectar-se a um banco de dados de testes em feat-ai-search, mantendo o banco de dados de desenvolvimento original na branch main. Desta forma, quando você troca de janela, você não precisa nem alterar os detalhes da conexão.

Ao entrar no diretório do Worktree, você usa as variáveis de ambiente daquele diretório Worktree específico diretamente para o desenvolvimento, sem ter que fazer nenhuma troca de ambiente ou reconstrução. Aquela sensação de “entrar e já começar a trabalhar” é realmente maravilhosa.

Fluxo de Trabalho de Fusão (Merge) do Worktree

Após concluir o desenvolvimento dentro de um Worktree, o fluxo de trabalho é, na verdade, idêntico a um branch tradicional, com apenas uma ação extra de “demolição”.

Etapas do Fluxo de Trabalho Descrição
1. Commit & Push na Filial Você deve ir fisicamente até a filial para aprovar.
2. Inspeção da Sede (Merge) Você pode voltar para a branch main para fazer o merge, ou abrir um Pull Request (PR) diretamente.
3. Demolição Elegante (Remove) Após a conclusão da tarefa, não exclua a pasta diretamente; use um comando do Git para derrubá-la: git worktree remove ../feat-ai-search

Bum! A cabana temporária do Worktree é derrubada, o espaço em disco é recuperado, e a sua sede continua impecavelmente limpa.

Guia para Evitar Armadilhas no Worktree

Embora o Worktree seja altamente útil, ainda existem algumas armadilhas para ficar de olho:

Item Descrição
Não mova a sede indiscriminadamente Porque o Worktree grava caminhos absolutos. Se você renomear o diretório da sede, a filial do Worktree irá perecer porque não conseguirá encontrar a sua “alma”.
Nada de ramificação dupla A mesma branch não pode ter o checkout feito simultaneamente em dois Worktrees.
Aspirador robô prune Se você, por descuido, excluir a pasta usando rm -rf, lembre-se de rodar o comando git worktree prune para limpar quaisquer registros remanescentes no diretório .git.

Conclusão: Eu Deveria Parar de Usar o Git Branch?

Cenários diferentes exigem métodos de desenvolvimento diferentes. Não se trata de um substituir o outro, mas sim de qual é o mais adequado.

Cenário Descrição
Pequenos ajustes do dia-a-dia Continue utilizando a branch; é leve e rápido.
Tarefas de grande escala Por exemplo, refatoração massiva, ajustes que abrangem múltiplas variáveis de ambiente, ou tarefas que requerem colaboração de longo prazo com a IA, abrir um Worktree é absolutamente a melhor escolha.

O Git Worktree é mais do que apenas um simples comando; é uma ferramenta poderosa que nos ajuda a manter o nosso fluxo de desenvolvimento. Da próxima vez que você se deparar com uma tarefa árdua e expansiva, experimente abrir uma “filial Git Worktree” isolada e vivencie um processo de desenvolvimento tranquilo como nunca!

Reference

All rights reserved,未經允許不得隨意轉載
Criado com Hugo
Tema Stack desenvolvido por Jimmy