Olá seres humanos dessa realidade virtual, neste artigo irei descrever o que é Git Flow e trarei um simples caso de uso.
Como sabem, Git é um sistema de controle de versões de software e Git Flow é um modelo de branches para projetos que utilizam Git. As pessoas utilizam Git Flow para gerir melhor e mais logicamente seus branches.
E como é o padrão de branch sugerido pelo Git Flow?
master: Contém o nosso código de produção.
develop: Contém o código do nosso próximo deploy, todos os testes em homologação devem ser realizados nesse branch. Conforme as features vão sendo realizadas elas serão mescladas com o branch develop.
feature/*: São os branches criados para novas funcionalidades. Um exemplo: feature/crud-users. Esses branches são criadas sempre à partir da branch develop.
hotfix/*: São os branches criados para correções críticas em produção e por isso são criadas a partir do master.
release/*: São os branches com código estável de cada versão.
Toda vez que um branch hotfix ou release é mesclado com o master o Git Flow gera automaticamente uma tag de versão, para agilizar um possível processo de downgrade.
Vamos a um exemplo prático?
Vamos criar um projeto modelo para entender todo o fluxo de gestão dos branchs. Para isso vamos utilizar o plugin disponibilizado pelo git.
1 - Instalando o plugin
$ brew install git-flow
2 - Criando um repositório git
$ mkdir app-flow $ cd app-flow $ git init
3. Inicializando o Git Flow
$ git flow init
Minha sugestão é sempre apertar enter para seguir com as nomenclaturas padrões sugerida pela plugin
No branches exist yet. Base branches must be created now. Branch name for production releases: [master] Branch name for "next release" development: [develop] How to name your supporting branch prefixes? Feature branches? [feature/] Release branches? [release/] Hotfix branches? [hotfix/] Support branches? [support/] Version tag prefix? []
4. Iniciando uma feature
Vamos criar nossa primeira feature
$ git flow feature start crud-user
Switched to a new branch 'feature/crud-user' Summary of actions: - A new branch 'feature/crud-user' was created, based on 'develop' - You are now on branch 'feature/crud-user' Now, start committing on your feature. When done, use: git flow feature finish crud-user
Após executado o procedimento acima, vamos criar um arquivo users.js (apenas para simular o desenvolvimento de uma feature). E depois dar nosso commit.
$ touch users.js $ git add . $ git commit -m "User registration created"
5. Finalizando a feature
Com a feature pronta agora podemos mesclá-la com o branch develop
$ git flow feature finish crud-user
Switched to branch 'develop' Updating f789672..d07d238 Fast-forward users.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 users.js Deleted branch feature/crud-user (was d07d238). Summary of actions: - The feature branch 'feature/crud-user' was merged into 'develop' - Feature branch 'feature/crud-user' has been removed - You are now on branch 'develop'
6. Iniciando o release
Agora que já temos a nossa funcionalidade de usuários na branch develop vamos gerar o primeiro release.
$ git flow release start 1.0.0
Switched to a new branch 'release/1.0.0' Summary of actions: - A new branch 'release/1.0.0' was created, based on 'develop' - You are now on branch 'release/1.0.0' Follow-up actions: - Bump the version number now! - Start committing last-minute fixes in preparing your release - When done, run: git flow release finish '1.0.0
7. Finalizando o release
$ git flow release finish 1.0.0
Switched to branch 'master' Merge made by the 'recursive' strategy. users.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 users.js Deleted branch release/1.0.0 (was d07d238). Summary of actions: - Latest objects have been fetched from 'origin' - Release branch has been merged into 'master' - The release was tagged '1.0.0' - Release branch has been back-merged into 'develop' - Release branch 'release/1.0.0' has been deleted
Lembrando que mudanças podem acontecer na release antes de ser mesclada para master, porém em muitos cenários essa branch é imediatamente já juntada com a master.
Seguindo até aqui, notara que o Git Flow irá abrir seu editor de texto default para que possa setar:
- Primeiro: Incluir uma descrição para o merge, esse texto é opcional;
- Segundo: Incluir um nome para a tag, que é obrigatório.
Feito isso seu projeto está na master pronto para ir para produção.
8. Conclusão
Dentro da minha realidade o Git Flow serviu como um ótimo recurso, tivemos um grande ganho de produtividade e organização. O fluxo de trabalho nos ajudou a melhorar a dinamização da equipe de desenvolvimento, fazer entregas de valor de negócio para o cliente mais constantes, além de facilitar o acompanhamento de branches e deploy.
Nesse post trouxe um simples exemplo de caso de uso, espero que seja útil dentro das suas rotinas de trabalho.
Que a força esteja com vocês
Published Dec 05, 2020 by f0rmig4