Extensão Gitflow
Tags: git
Published: 2022-07-16 04:19:17

## Gitflow
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lfnjy5t9a8oxytzzlm8e.png)

A ideia do GitFlow é que a branch master (hoje em dia o nome está sendo [trocado para main](https://www.theserverside.com/feature/Why-GitHub-renamed-its-master-branch-to-main#:~:text=GitHub%20took%20action%20based%20on,a%20different%20default%20for%20new)) Vai ser a branch onde fica o sistema em produção para isso vamos ter uma branch auxiliar, no caso da imagem a branch "Develop" onde vamos subir os nossos códigos que vão ser produzidos a partir dessa branch.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ztw42f239fjl18um27sg.png)
 
Depois de um tempo a branch vamos ter uma segunda branch que vai ser a release onde vamos subir ela para produção, fazemos isso para poder continuar atualizando a branch develop.

Uma exceção para esse fluxo é o hotfix, onde caso encontremos um bug em master que seja importante a resolução rápida, criamos uma nova branch a partir de master e fazemos o merge dela direto em master e em develop para garantir que os dois foram corrigidos.

## Extensão
existe uma extensão para lidar com o gitflow ela pode ser instalada por esse link https://github.com/petervanderdoes/gitflow-avh/wiki/Installing-on-Linux,-Unix,-etc.

depois de instalarmos a extensão podemos rodar o comando 
```bash
git flow
```
e se ele retornar os comandos que pode usar está tudo certo.

ao usarmos o 

```bash
git flow init 
```
ele vai pedir umas configurações para inicializar

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7vvyhokui21rbb2vquvr.png)

e como usar a extensão? se quisermos criar uma nova feature a ideia é que vamos criar uma branch feature 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5d373bdjj8m5ajbyb7yg.png)
 
perceba que a própria extensão criou uma nova branch com o prefixo de feature e me colocou nessa branch, criei um arquivo main.js nessa branch e isso era tudo que queria fazer nela, nesse caso vou rodar o comando 

```bash
git flow feature finish <nome_da_feature>
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gui6g9qrzoboikimw2qm.png)

a extensão já faz automaticamente o merge para a branch develop e me leva para ela. A continuação do fluxo é criar uma branch de release, então temos uma configuração para isso na extensão também 

```bash
git flow release start <versão_da_release>
```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/odch7h13814z1ovimj6w.png)

Agora podemos continuar criando features e passando elas para develop sem problemas 

e quando damos o finish no release ele vai pedir uma mensagem para o commit e uma tag e então vai fazer o merge direto com a main e com a develop para garantir a consistência

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bayxwtjqx68enh8n34p6.png)

O hotfix segue o mesmo padrão das outras, mas a diferença é que ele vai pedir uma tag quando usarmos o finish pois ele vai fazer um merge direto para main

# Considerações
Achei a extensão muito legal para conhecer e a forma que ela automatiza algumas coisas como a criação de novas branches já com o prefixo e a deleção dessas branches ao serem finalizadas , mas acabei não gostando dos merges automáticos para dev e master, no contexto do dia a dia acabo preferindo muito mais fazer pull requests ou no caso do gitlab merge requests para que os outros devs da equipe possam fazer os code reviews e garantir a qualidade do código