Pular para o conteúdo principal

Git Flow Workflow

O Gitflow é uma extensão do Git. É um workflow de fluxo de desenvolvimento de software para Git.

Qualquer equipe pode ter o seu workflow específico desde que todos o conheçam. O Gitflow é workflow é uma proposta já consolidada em equipes grandes que funciona bem, então não vamos reinventar a roda.

Seria uma metodologia de ramificação para oferecer uma estrutura robusta e gerenciamento de projetos maiores.

Pode-se aplicar um gitflow sem a extensão nenhuma desde que conheça a sequência, mas as funcionalidades da extensão facilitam o trabalho.

É atribuída funções específicas para diferentes branches e define quando elas devem interagir. Além das ramificações de recursos, ele utiliza ramificações individuais para preparar, manter e registrar lançamentos.

O Gitflow é uma ideia de fluxo de trabalho Git. Isto significa que ele dita que tipos de ramificações configurar e como fazer a mesclagem.

Instalação​

Em windows instale o git normalmente que o flow já está incluso.

# Linux ubuntu
sudo apt-get install git-flow
# Mac
brew install git-flow

Auto complete​

Para usar com o bash somente precisa

sudo apt-get install git bash-completion -y

Para zsh e oh my zsh

wget -O https://sourceforge.net/p/zsh/code/ci/master/tree/Completion/Unix/Command/_git\?format\=raw > _gitflow.zsh
mv _gitflow.zsh ~/.oh-my-zsh/completions/_gitflow.zsh
source ~/.zshrc

Comando flow Init​

git flow init

É uma extensão do comando padrão para inicializar um repositório local git init. Não altera nada no repositório, a não ser criar as ramificações para você.

gitflow

Branch principal (main) e de desenvolvimento (develop) Em vez da única branch main, este fluxo de trabalho usa duas branches para registrar o histórico do projeto. A branch main armazena o histórico do lançamento oficial, e a branch develop serve como uma ramificação de integração para recursos. Também é conveniente marcar todas as confirmações na branch main com um número de versão usando uma tag.

A primeira coisa é criar uma branch develop com os comandos.

# cria a branch localmente
git branch develop
# sobe a branch
git push -u origin develop o

Se um projeto já foi criado com uma branch develop no repositório não é necessário o comando acima.

Uma boa prática em todo projeto é criar uma branch develop em todos os projetos.

Esta branch develop vai conter o histórico completo do projeto, enquanto que a branch main, a principal, vai conter uma versão abreviada. Outros desenvolvedores agora vão precisar clonar o repositório e criar uma ramificação de rastreamento para a de develop.

Ao utilizar a biblioteca de extensão do git-flow, executar git flow init no repositório existente vai criar uma ramificação de desenvolvimento:

git flow init
Initialized empty Git repository in ~/project/.git/

No branches exist yet. Base branches must be created now.

Branch name for production releases: [master] main

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? []

Veja a saída

git branch

develop

main

Branches de Features​

Cada nova feature deve residir na própria ramificação, a qual pode ser enviada por push para o repositório do projeto. No entanto, em vez de serem ramificações da branch main (principal), as ramificações das features usam a branch develop (desenvolvimento) mais recente como ramificação pai. Quando um recurso é concluído, ele é mesclado de volta na branch develop. Os recursos não devem nunca interagir com a branch main.

para iniciar nova feature seria

Sem as extensões do git-flow:

git checkout develop

git checkout -b feature_branch

Ao usar a extensão do git-flow:

git flow feature start feature_branch

E para finalizar Sem as extensões do git-flow:

git checkout develop
git merge feature_branch

Ao usar a extensão do git-flow:

git flow feature finish feature_branch

Branch de Release​

Quando a branch develop adquiriu recursos o bastante para uma release ou a data de lançamento esta se aproximando, você bifurca uma ramificação de lançamento a partir da de desenvolvimento. Nesse ponto nenhum novo recurso deve ser adicionado, somente correção de bugs e testes, geração de documentação e outras tarefas. Quando estiver pronta essa release, a branch de release é mesclada com a branch main e marcada com um número de versão. Além disso, ela deve ser mesclada de volta com a branch develop, a qual pode ter progredido desde que o lançamento foi iniciado.

Sem as extensões do git-flow:

git checkout develop

git checkout -b release/0.1.0

Ao utilizar extensões do git-flow:

git flow release start 0.1.0

Depois de pronto, o release vai ser mesclado na branch main e na develop e, então, a branch de release vai ser excluída. O processo de mesclar de volta com branch develop é importante porque atualizações importantes podem ter sido adicionadas à ramificação de release e elas devem ser acessíveis as novas features. É o ponto ideal para um pull.

Para finalizar a branch de release

Sem as extensões do git-flow:

git checkout main

git merge release/0.1.0

Ou, com a extensão do git-flow:

git flow release finish '0.1.0'

Branches de Hotfix​

As branches de manutenção ou de “hotfix” são usadas para corrigir com rapidez lançamentos de produção. As ramificações de hotfix se parecem com ramificações de lançamento e de recurso, com a diferença de serem baseadas a partir da branch main em vez da de develop. Esta é a única ramificação que deve ser bifurcada com objetividade a partir da branch main. Assim que a correção é concluída, ela deve ser mesclada tanto na branch main quanto na de develop (ou na ramificação de lançamento atual) e a branch main deve ser marcada com um número de versão atualizado.

Sem as extensões do git-flow:

git checkout master
git checkout -b hotfix_branch

Ao utilizar extensões do git-flow:

git flow hotfix start hotfix_branch

Assim como na finalização da ramificação de release, a ramificação de hotfix é mesclada tanto na branch main quanto na de develop.

Sem as extensões do git-flow

git checkout master
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch

Com git-flow

git flow hotfix finish hotfix_branch

git flow é só um fluxo de trabalho, mas a extensão facilita a vida!