Este tutorial tem por objetivo facilitar o entendimento e aplicabilidade da forma como GitFlow funciona, sem enrolação e direto ao ponto:
Gitflow é um projeto de fluxo de trabalho do Git que foi popularizado por Vincent Driessen. O fluxo define um modelo de ramificação estrito projetado em torno do lançamento e a publicaçāo do projeto. A imagem abaixo da uma idéia geral desse fluxo.
A tabela abaixo detalha os nomes e o que significa cada nome de branch:
Situação | Branch | Descrição, Instruções |
---|---|---|
Estável | master | Aceita merges a partir da Release e Hotfixes |
Trabalho | develop | Aceita merges a partir das Features e Hotfixes |
Features Internas | feature-id | Cria-se a partir da develop |
Bugfix | bugfix-id | Cria-se a partir da branch develop |
Hotfix | hotfix-id | Cria-se branch a partir da master |
Feature Branches
Cada nova feature usa a develop como branch de origem.
$ git checkout develop
$ git checkout -b feature-id
Após as modificações efetuadas realize o commit no seguinte padrão:
$ git commit -m "[Feature-id] - Breve descrição da tarefa"
Exemplo para Hotfix - Correções que precisem entrar na produção imediatamente.
$ git commit -m "[Hotfix-id] - Breve descrição da tarefa
Após o commit realizado deve-se obter as mudanças remotas realizadas na branch develop :
$ git checkout develop
$ git pull --rebase
Voltando para a branch da feature . Aplicam-se as modificações já trazidas da develop
$ git checkout feature-id
$ git rebase develop
PS: NÃO utilize o seguinte comando git merge develop
Deve-se enviar suas modificações para que se realize o Pull Request :
$ git push origin feature-id
A partir daí crie um Merge Request pela interface web do Gitlab.
Aguarde o código ser revisado por outro desenvolvedor, caso aprovado ele será mesclado com a develop
Release
- As branchs de release funcionam como uma área de armazenamento temporário entre o desenvolvimento (develop) e produção (master).
Preparação :
- Atualização da develop:
$ git checkout develop $ git pull --rebase
-
Incremente o valor da versão no pom.xml caso necessário.
- Criação da branch de release com base na develop:
$ git checkout -b release-x.x.x develop $ git push origin release-x.x.x
- Atualizar branch develop , é importante atualizar, pois updates críticos podem ter sido adicionados na release branch, e eles precisam estar acessíveis na develop :
$ git checkout develop $ git merge --no-ff release-x.x.x $ git push origin develop
Produção
- Acesse a branch master:
$ git checkout master $ git pull --rebase
- Faça merge da master sem fast-forward com a release:
$ git merge --no-ff release-x.x.x
- Envie para o repositório:
$ git push origin master
- Crie a tag na branch master com o número da versão que está no pom.xml:
$ git tag -a vx.x.x master $ git push --tags
Hotfixes
- Bug descoberto em produção :
- Cria-se um branch de hotfix com ponto de partida na master :
$ git checkout -b hotfix-id master
- Resolva o bug, e retorne para a master branch :
$ git checkout master $ git pull --rebase
- Faça um merge sem fast-forward, seguido de push da seguinte forma:
$ git checkout master $ git merge --no-ff hotfix-id $ git push origin master
- Incremente o valor tag na branch master
$ git checkout master $ git tag -a v1.x.1 master $ git push --tags
- Retorne para a develop, atualize-a com o hotfix seguido de push :
$ checkout develop $ git pull --rebase $ git merge --no-ff hotfix-id $ git push origin develop
- Bug descoberto na release branch :
- Cria-se um branch de hotfix com ponto de partida na release-x.x.x:
$ checkout -b bugfix-id release-x.x.x
- Resolva bug, e retorne para a release branch :
$ checkout release-x.x.x
- Faça um merge sem fast-forward seguido de push, da seguinte forma:
$ merge --no-ff bugfix-id $ git push origin release-x.x.x
- Retorne para a develop, atualize-a com o bugfix seguido de push :
$ checkout develop $ git merge --no-ff bugfix-id $ git push origin develop
Qualquer dúvida postem nos comentários !!!!