Padronização com GitFlow - Git e Github
Tags: git, github, programming, braziliandevs
Published: 2022-05-12 02:40:48

Depois que aprendemos a trabalhar com as Branchs e os Merges, é importantes nós criarmos alguns padrões e organização do projeto, para não ficar aquela bagunça no histórico. Com esse pensamento o Holandês [Vincent Driessen](https://nvie.com/posts/a-successful-git-branching-model/) teve a brilhante ideia de criar o GitFlow.
O Gitflow é apenas uma ideia abstrata do fluxo de trabalho normal do Git, ou seja, ele dita que tipos de branchs configurar e como realizar o merge.

![GitFlow Preview](https://miro.medium.com/max/1400/1*wN0lsneK5VOtvta4VLBnHw.jpeg)

---

## Branchs e Merge
Antes de entendermos o GitFlow, é necessário termos dois conceito que são fundamentais, **branch** e **merge** bem claro, para isso sinta-se avontade de ler meus dois artigo onde eu explico bem isso, _[Conceito de Branch - Git e Github](https://dev.to/eduardoopv/conceito-de-branch-git-e-github-2bfe)_ onde explico bem sobre a Branch, e _[Conceito de Merge - Git e Github](https://dev.to/eduardoopv/conceito-de-merge-git-e-github-4j0g)_ onde falo sobre Merge.

---

## Fluxo do GitFlow

Para ficar mais claro, podemos classificar o GitFlow em dois tipos de Branch:

1. **Principais**: São as Branch Master e Develop;
1. **Suporte**: São as conhecidas como Feature, Release e Hotfix.

![Classificação das branchs](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0x6u7pngkk947uo0qlov.png)

---
 
## Regras das branchs:

- **Master:** Utilizada para receber os commits estáveis que foram desenvolvidos na Develop, digamos que são códigos _prontos para produção_.

- **Develop:** A branch que irá desenvolver todas as novas Features, após revisar e estar estável, ela será responsavél por realizar um merge na Master.

- **Features:** São as branchs criadas a partir da Develop que irão desenvolver uma funcionalidade especifica, fazendo Merge na Develop também.

- **Releases:** Uma vez que se tem uma nova Feature incorporada na Develop, é preciso prepará-la para entrar em produção, o que não pode ser feito levando-a apenas para a Master, é preciso utilizar uma outra Branch de suporte, chamada Release.
    Pode ser que apenas após a criação de um conjunto de novas Features que você tenha uma Release pronto. Porém, uma vez que essas Features estejam prontas na Develop, será possível uní-las em um Branch Release.

- **Hotfixes:**  São branches para realizar correçõs especificas e criticas que são encontradas em produção, criada a partir da Master, deve ser unida tanto com Develop quanto com a Master.

Após entender a base de todo conceito, existe uma ferramenta para auxiliar a criação e exclusão de branch, chamado GitFlow Extensão.

---

## GitFlow Extensão:

O GitFlow Extensões é uma extensão que auxilia no desenvolvimentos de projetos que utilizam Git, ele tem como objetivo automatizar algumas funções repetivias no processo das branchss, o que ajuda a poupar algumas linhas no terminal.
Para começar a utilizar o GitFlow Extensões, depois de iniciar o Git com o comando `git init`, basta digitar:

`$ git flow init`

![Iniciando o GitFlow extensão](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zsob2tk5ml7q9upk9qan.png)

Ele dá a liberdade de você alterar o nome das Branch de produção, ou a develop, como mudar os prefixos das outras Branches, por exemplo:
Alterar a branch Feature para Feat, dando uma maior liberdade para cada pessoa/time.

Usando `$ git flow init [-d]` , ele aceita todos os nomes automaticamente.

## Primeira feature:

Para criar a primeira Feature, o processo é extremamente simples:

`$ git flow feature start <NomeDaBranch>`

![Criando uma feature com o GitFlow](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eqfsnrq0v9kqwgjet26x.png)
 
Com isso ele nos retorna algumas coisas, no `Summary of actions:`
1. Uma nova branch foi criada 'feature/formulairo' baseada na 'develop'.
2. Agora você está na branch 'feature/formulario'.

## Encerrando a feature:

Após criar a primeira Feature, digamos que você já implementou e commitou todas as funcionalidades e agora precisa dar um Merge na Develop e excluir ela, para isso rodamos:

`$ git flow feature finish <NomeDaBranch>`

![Finalizando a feature com o GitFlow](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nz1nvr2k9wpoetxxbxsq.png) 

Voltando para o `Summary of actions:`, ele explica o que foi realizado:
1. A branch de feature 'feature/formulario' foi mesclada com a 'develop'.
2. Branch de feature 'feature/formulario' foi deletada localmente.
3. Agora você está na branch 'develop'.

---

Chegamos ao fim, com isso você será capaz de organizar a linha do tempo do seu projeto, a ideia do GitFlow não é fundamental para o desenvolvedor, mas ao longo do tempo, conforme o projeto escala e existem diversas pessoas trabalhando em conjunto ele ajuda a manter a clareza no projeto, e ajuda a padronizar a forma que é realizado o processo de branchs.