Git Flow

Cenários comuns
| Ambiente | Branch |
|---|---|
| Produção | Em produção (master) |
| Homologação | Versão candidata (sta) |
| Desenvolvimento | Desenvolvimento atual (dev) |
Como este é um exemplo, ele pode ser diferente da realidade.
O que o produto espera do seu código
Se você segue um cenário parecido com o exemplo, provavelmente sabe que não pode simplesmente adicionar funcionalidades à master nem publicar correções urgentes na master sem integrá-las à staging, ou vice-versa. Por isso, precisamos seguir uma série de passos antes de publicar novas funcionalidades ou correções urgentes.
Adicionar uma funcionalidade
- Atualize dev, comece a programar e depois envie a branch para o repositório remoto.
- De tempos em tempos, faça a integração com staging e o deploy.
- Se algo não funcionar em staging, corrija nessa branch.
- Se tudo funcionar em staging, integre e envie as alterações para master e faça o deploy em produção.
Um erro em produção!
- Passe para a branch master, corrija o erro e então… envie as alterações para master e integre master em staging e development para que essas branches também fiquem livres do erro.
Melhorar esse fluxo
Como Staging é nosso servidor para testar novas funcionalidades… A branch sta é nossa próxima versão a ser publicada, ou branch de versão candidata.
Introduzir um fluxo para funcionalidades
- Crie uma nova branch baseada em staging.
- Se precisar colaborar, envie a branch da funcionalidade para origin.
- Quando estiver pronta, integre-a em staging.
- Depois, exclua a branch da funcionalidade.
Introduzir um fluxo para correções urgentes
- Uma correção urgente é uma solução que precisa ser aplicada em produção.
- Crie uma nova branch baseada em master.
- Programe a correção e integre-a em master e sta.
- Depois das duas integrações, exclua a branch da correção urgente.
Até aqui…
Se seguirmos cada passo, estaremos usando um bom fluxo de trabalho.
Mas a criação, integração e exclusão das branches de funcionalidades e correções urgentes podem ser automatizadas.
git-flow
Git Flow é uma extensão do Git. Foi criado para seguir esses passos sem complicações.
Instalar git-flow
No Linux: sudo apt-get install git-flow
No Mac: brew install git-flow
Inicializar git-flow em um projeto existente
Execute git flow init no projeto.
Você será perguntado sobre o comportamento a seguir ao criar branches e sobre como definir a finalidade de cada uma.
Não importa em qual branch você esteja agora; apenas lembre-se de manter as branches master e sta atualizadas.
Criar uma funcionalidade com Git Flow
git flow feature start <FeatureName>
-- code a little bit
git add .
git commit -m “This is a good commit”
git flow feature finish <FeatureName>
Criar uma correção urgente com Git Flow
git flow hotfix start <HotfixName>
-- code the fix
git add .
git commit -m “This is an awesome fix”
git flow hotfix finish <HotfixName>
Conclusão
Usar git-flow melhora a forma de manter o código e também ajuda a equipe a seguir o mesmo fluxo e a evitar erros dos novos integrantes enquanto aprendem. Git Flow é uma convenção e pode ser adaptado às suas necessidades: basta criar sua própria cópia.
Slides em: https://speakerdeck.com/rec/git-flow
Nota: este artigo não pretende abordar os fundamentos do git-flow nem ser um tutorial de uso. É uma introdução ao assunto e, talvez, um convite para utilizá-lo.