# **Gitflow** ## O que é o gitflow? - #### Primeiramente oque não é o Gitflow - Não é um software - Não é uma biblioteca ou framewok ## O git flow pode ser adotado como: - Modelo - estrategia - fluxo de trabalho # Porque? - Para organizar as tarefas e manter uma versão estável do código do projeto e trazer agilidade sem perder estabilidade para as próximas versões estáveis do projeto. # Como? - Cada equipe pode ter o próprio gitflow, a estratégia pode variar de acordo com o projeto. Por exemplo caso o projeto tenha opções de entrega e integração continua ou não, o gitflow pode ir além do time que desenvolve o projeto em si, envolvendo o time de `Garantia` de `Qualidade`, onde determinadas tarefas podem ser refeitas caso não cumpram de alguma forma os requisitos desta em sua totalidade. # Exemplo - Comumente um Gitflow segue alguns passos em determinadas situações, as situações geralmente são: - `feature`: Nova funcionalidade em um projeto. - `bugfix`: Correções de bugs em features em andamento. - `hotfix`: Correções de bugs em ambiente produtivo. - `release`: Lançamento de novas versões. - Para cada situação é criado uma branch de curta duração, nas quais são baseadas em `branchs` de longa duração. **São essas as branchs principais**: - `main` Nela fica todo o código de produção. Todas as novas funcionalidades que estão em desenvolvimento são mescladas ou associadas à ela. Para interagir com essa branch, é necessário criar uma branch `Hotfix` ou um nova branch `Release`. **Lembrando que essa `branch` é "travada", nao podendo ser feito commits na mesma, aceitando alterações apenas mediante Pull Requests.** - `develop` O código da próxima versão fica armazenado nessa branch. Sua principal finalidade é ser como uma linha do tempo com os últimos desenvolvimentos, ou seja, `features`, `bugfixes`, funcionalidades que ainda não foram publicadas e serão posteriormente associadas à branch `main`. **Lembrando que essa `branch` é "travada", nao podendo ser feito commits na mesma, aceitando alterações apenas mediante Pull Requests.** - **Branch Feature** - A branch Feature é usada para o desenvolvimento de `features` e `bugfixes`. Criada a partir da branch `develop`, automaticamente deve ser removida assim que fazer o `merge` com a branch de origem a `develop`. Além disso, é necessário destacar que a Feature não pode ter interação com a `main`, somente com a Develop. - **Branch bugfix** - A branch bugfix é criada a partir da `develop` para fazer correções localizadas em features novas em processo de testes. Assim que é concluída, deve se fazer o `merge` com a `develop` logo após a finalização do merge ela deve ser apagada. - **Branch Hotfix** - A branch Hotfix é criada a partir da `main` para fazer correções rápidas localizadas no sistema já em produção. Assim que concluída, ela deve ser apagada logo após a finalização do merge com a `main` e a `develop`. - **Branch Release** - A branch Release é a finalização de um processo de desenvolvimento, é criada a partir da `develop` e mesclada com a `main` onde teremos todas as `features`, `bugfixes` e `hotfixes` do ciclo atual. Após esse `merge` podemos gerar tanto versões de teste em homologação quanto de produção. Assim que concluída, ela se apaga logo após a finalização do merge com a `main` e a `develop`. A partir dai, podemos assim gerar uma `tag` da nova versão a partir da `main`.