O GitFlow é uma ideia abstrata para gerenciamento de branches utilizando Git. Ele auxilia a como deve ser criada as branches, e como mergea-las. No windows, a instalação base do Git vem com o comando git flow, que permite determinar o fluxo no repositório. A única diferença dele para o git init, é que ele cria e delimita nomes para branches específicas. Em sistemas OSX, ele pode ser instalado via brew, com o comando brew install git-flow
A combinação entre as duas branches, permite manter um histórico de versões. A master é a branch de produção, e onde é lançada as tags de versões. A develop é uma branch de integração com as features, ela é criada a partir da master, e todas as próximas features são mergeadas nela.
Uma branch feature é criada a partir da última develop, e quando é finalizada, é mergeada novamente na develop e deletada. Feature branches nunca interagem diretamente com a master.
Quando a develop está pronta para ir para homologação, é criada uma release a partir dela. Na branch release criada, é realizada conserto de bugs, documentação, melhorias, qualquer solicitação nos testes realizados pelo QA. Após finalizada e testada, é mergeada com a master e a develop, criando uma nova tag de versão na master e depois deletada.
A hotfix branch são para resolver erros ocorridos em produção, ela é criada diretamente a partir da master, assim que resolvido, é mergeado a master e develop (ou release se estiver ativa ainda). Adicionando também uma nova tag de versão a master.
O fluxo geral do Gitflow é:
- develop branch é criada a partir do master
- release branch é criada a partir de develop
- feature branches são criadas a partir da develop
- Quando uma release é concluída, ela é mesclado com a develop branch
- Quando a release é concluída, ele é mesclado com o develop e a master
- Se um problema na master for detectado, um branch de hotfix é criado a partir da master
- Assim que o hotfix for concluído, ele é mesclada para develop e master