Fluxos de Trabalho (Workflows) com Git: Git Flow, GitHub Flow e Trunk-Based Development
- #Git
O Git se consolidou como a ferramenta de controle de versão mais utilizada no mundo, sendo parte essencial do dia a dia de desenvolvedores, times de tecnologia e empresas de todos os portes. Entretanto, dominar apenas os comandos do Git não é suficiente para garantir um fluxo de trabalho eficiente. Por isso, surgiram diferentes modelos de workflows com Git, adaptados às mais variadas realidades de projetos e equipes.
O que são Workflows com Git?
Um workflow com Git é uma estratégia que define como o trabalho com o código será organizado dentro de um repositório. Ele especifica:
- Como os branches são criados, nomeados e utilizados
- O processo de integração de novas funcionalidades
- O fluxo de revisão de código e publicação de releases
A escolha do workflow certo depende de diversos fatores, como o tamanho do time, a frequência de entrega, o ciclo de desenvolvimento e a cultura da empresa.
1. Git Flow
Criado por Vincent Driessen, é um dos workflows mais completos e estruturados.
Estrutura:
main
(oumaster
): branch principal com código pronto para produção.develop
: branch de desenvolvimento, onde as funcionalidades são integradas.feature/*
: branches para desenvolvimento de novas funcionalidades.release/*
: para preparação de uma versão estável.hotfix/*
: para correção imediata de bugs em produção.
Indicado para:
- Times grandes
- Projetos com releases bem definidos
- Aplicativos com ciclos de versão regulares
Vantagens:
- Bem estruturado e organizado
- Facilita o controle de versão e hotfixes
- Ideal para entregas agendadas
Desvantagens:
- Complexidade na gestão de branches
- Pode gerar sobrecarga para times pequenos
- Merges frequentes e conflitos potenciais
2. GitHub Flow
Criado e promovido pela GitHub, é mais simples e ágil, voltado para integrações e deploys contínuos.
Estrutura:
main
: branch principal, sempre estável e pronta para deploy.feature-branches
: criadas a partir damain
para cada funcionalidade, corrigidas via Pull Requests (PRs).
Indicado para:
- Times pequenos ou médios
- Projetos com entrega contínua
- Startups, projetos open-source
Vantagens:
- Simples e fácil de entender
- Integração contínua é facilitada
- Feedback rápido com Pull Requests
Desvantagens:
- Pouco controle para grandes projetos
- Dificuldade em lidar com múltiplas versões simultâneas
- Pode gerar instabilidade se a branch
main
não for bem protegida
3. Trunk-Based Development
Neste modelo, todos os desenvolvedores trabalham diretamente (ou quase diretamente) na branch principal, chamada de trunk
ou main
, integrando o código com altíssima frequência.
Estrutura:
trunk
(oumain
): branch principal, foco absoluto do desenvolvimento.- Feature toggles são utilizados para controlar funcionalidades ainda não liberadas.
Indicado para:
- Times altamente colaborativos
- Projetos com DevOps/CI-CD bem estabelecidos
- Grandes empresas com cultura de entrega contínua (ex: Google, Facebook)
Vantagens:
- Altíssima frequência de entrega
- Menos conflitos de merge
- Estimula a cultura DevOps
Desvantagens:
- Exige maturidade da equipe
- Necessita de testes automatizados robustos
- Feature toggles podem aumentar a complexidade do código
A escolha do workflow Git ideal depende de fatores como o tamanho da equipe, maturidade do time, necessidades de entrega e o tipo de projeto. Não existe uma solução única para todos, e muitos times adotam híbridos entre os modelos para se adequar melhor à sua realidade.
- Para projetos complexos e bem estruturados, o Git Flow é uma excelente opção.
- Para entregas rápidas e processos simples, o GitHub Flow é direto e eficaz.
- Para grandes times com cultura DevOps consolidada, o Trunk-Based Development é o caminho.
A chave é entender as características de cada abordagem e escolher (ou adaptar) o modelo que melhor favorece a produtividade, qualidade e agilidade da sua equipe.
Comandos Git Essenciais por Categoria
1. Configuração Inicial
bash
CopiarEditar
git config --global user.name "Seu Nome"
git config --global user.email "seu@email.com"
Define o nome e o e-mail do usuário, que aparecerão nos commits.
2. Iniciar e Clonar Repositórios
bash
CopiarEditar
git init
Inicia um repositório Git vazio na pasta atual.
bash
CopiarEditar
git clone https://github.com/usuario/repositorio.git
Clona um repositório remoto para sua máquina.
3. Trabalho com Branches
bash
CopiarEditar
git branch
Lista as branches existentes.
bash
CopiarEditar
git branch nova-feature
Cria uma nova branch.
bash
CopiarEditar
git checkout nova-feature
Muda para a branch criada.
bash
CopiarEditar
git checkout -b nova-feature
Cria e já muda para a nova branch.
bash
CopiarEditar
git merge develop
Faz o merge da branch develop
na branch atual.
bash
CopiarEditar
git branch -d nome-da-branch
Deleta uma branch local.
4. Comandos de Commit
bash
CopiarEditar
git add arquivo.txt
Adiciona um arquivo específico para staging.
bash
CopiarEditar
git add .
Adiciona todas as alterações.
bash
CopiarEditar
git commit -m "Mensagem clara sobre a alteração"
Cria um commit com uma mensagem descritiva.
bash
CopiarEditar
git commit --amend
Edita o último commit (ex: corrigir a mensagem).
5. Trabalhando com Repositórios Remotos
bash
CopiarEditar
git remote add origin https://github.com/usuario/repositorio.git
Conecta seu repositório local ao remoto.
bash
CopiarEditar
git push origin main
Envia seus commits locais para a branch main
no repositório remoto.
bash
CopiarEditar
git pull origin main
Atualiza seu repositório local com o código mais recente do remoto.
6. Controle de Histórico
bash
CopiarEditar
git status
Mostra os arquivos modificados e o status do repositório.
bash
CopiarEditar
git log
Exibe o histórico de commits.
bash
CopiarEditar
git diff
Mostra as diferenças entre arquivos modificados e o último commit.
7. Revertendo Mudanças
bash
CopiarEditar
git checkout -- arquivo.txt
Descarta mudanças em um arquivo.
bash
CopiarEditar
git reset --hard HEAD
Volta completamente para o último commit, descartando todas as mudanças.
bash
CopiarEditar
git revert <id-do-commit>
Cria um novo commit que desfaz um commit anterior específico.
8. Trabalhando com Pull Requests (GitHub Flow)
- Criar uma branch nova:
git checkout -b nova-feature
- Fazer alterações e commits
- Subir para o repositório remoto:
git push origin nova-feature
- Criar um Pull Request no GitHub