Fluxo de trabalho de Gitflow

 

Gitflow Workflow é um design de fluxo de trabalho Git que foi publicado e popularizado pela primeira vez por Vincent Driessen no nvie. O Gitflow Workflow define um modelo de ramificação rigoroso projetado com base no lançamento do projeto. Isto oferece uma estrutura robusta para gerenciar projetos maiores.  

O Gitflow é ideal para projetos que têm um ciclo de lançamento agendado. Este fluxo de trabalho não adiciona novos conceitos ou comandos além do necessário para o Fluxo de trabalho de ramificação de recurso. Em vez disso, ele atribui funções bem específicas para diferentes ramificações e define quando elas devem interagir. Além das ramificações de recurso, ele utiliza ramificações individuais para preparar, manter e registrar lançamentos. Com certeza, você também aproveita todos os benefícios do Fluxo de trabalho de ramificação de recurso: solicitações pull, experimentos isolados e colaboração mais eficiente.

Introdução

O Gitflow é apenas uma ideia abstrata do fluxo de trabalho Git. Isto significa que ele dita que tipos de ramificações configurar e como fazer a mesclagem. Vamos falar sobre os objetivos das ramificações abaixo. O conjunto de ferramentas git-flow é uma ferramenta de linha de comando que tem um processo de instalação. O processo de instalação para o git-flow é simples. Pacotes para o git-flow estão disponíveis em diversos sistemas operacionais. Nos sistemas OSX, você pode executar o brew install git-flow. No windows, é necessário fazer o download e instalar o git-flow. Após instalar o git-flow, você pode usar no projeto executando git flow init. O Git-flow é um invólucro do Git. O comando git flow init é uma extensão do comando padrão git init e não altera em nada o repositório a não ser criar ramificações para você.

Como funciona

Fluxo de trabalho Git flow – Ramificações de histórico

Branch principal e de desenvolvimento

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

A primeira etapa é complementar a branch principal padrão com uma ramificação de desenvolvimento. Um jeito simples de alcançar isto é com um desenvolvedor criando uma ramificação de desenvolvimento no local e fazendo o push para o server:

git branch develop
git push -u origin develop

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

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]
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? []
$ git branch * develop  master

Ramificações de recurso

Cada novo recurso deve residir na própria ramificação, a qual pode ser enviada por push para o repositório central para backup/colaboração. No entanto, em vez de serem ramificações da branch principal, as ramificações de recurso usam a ramificação de desenvolvimento como ramificação pai. Quando um recurso é concluído, ele é mesclado de volta na ramificação de desenvolvimento. Os recursos não devem nunca interagir com objetividade com a branch principal.

Fluxo de trabalho Git flow – Ramificações de recurso

Observe que as ramificações de recurso combinadas com a ramificação de desenvolvimento são, para todos os efeitos, o Fluxo de trabalho de ramificação de recursos. No entanto, o Gitflow Workflow não para aí.

As ramificações de recurso são em geral criadas a partir da ramificação de desenvolvimento mais recente.

Criação da ramificação de recurso

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

Continue seu trabalho e use o Git como de costume.

Finalização da ramificação de recurso

Quando você concluir o trabalho de desenvolvimento no recurso, a próxima etapa é mesclar a ramificação de recurso na de desenvolvimento.

Sem as extensões do git-flow:

git checkout develop
git merge feature_branch

Usando as extensões do git-flow:

git flow feature finish feature_branch

Ramificações de lançamento

Fluxo de trabalho Git flow – Ramificações de lançamento

Uma vez que a ramificação de desenvolvimento adquiriu recursos o bastante para um lançamento (ou uma data de lançamento predeterminada está se aproximando), você bifurca uma ramificação de lançamento a partir da de desenvolvimento. Criar esta ramificação dá início ao próximo ciclo de lançamento, portanto nenhum novo recurso pode ser adicionado depois deste ponto—apenas correções de bug, geração de documentação e outras tarefas relacionadas ao lançamento devem ir nesta ramificação. Quando estiver pronta para ser lançada, a ramificação de lançamento é mesclada com a branch principal e marcada com um número de versão. Além disso, ela deve ser mesclada de volta com a ramificação de desenvolvimento, a qual pode ter progredido desde que o lançamento foi iniciado.

O uso da ramificação dedicada ao preparo de lançamentos possibilita que uma equipe aperfeiçoe o lançamento atual enquanto outra equipe continua a trabalhar nos recursos para o próximo lançamento. Ele também cria fases de desenvolvimento bem definidas (por exemplo, é fácil dizer "Esta semana a gente está se preparando para a versão 4.0" e de fato ver como fica na estrutura do repositório).

A elaboração de ramificações de lançamento é outra operação de ramificação simples. Assim como as ramificações de recurso, as ramificações de lançamento são baseadas na ramificação de desenvolvimento. Uma nova ramificação de lançamento pode ser criada usando os seguintes métodos.

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
Switched to a new branch 'release/0.1.0'

Depois de pronto, o lançamento vai ser mesclado na branch principal e na de desenvolvimento e, então, a ramificação de lançamentovai ser excluída. O processo de mesclar de volta com a ramificação de desenvolvimento é importante porque atualizações importantes podem ter sido adicionadas à ramificação de lançamento e elas devem ser acessíveis a novos recursos. Se sua organização enfatiza a revisão de códigos, este seria o local ideal para uma solicitação pull.

Para finalizar a ramificação de lançamento, use os seguintes métodos:

Sem as extensões do git-flow:

git checkout master
git merge release/0.1.0

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

git flow release finish '0.1.0'

Ramificações de hotfix

Fluxo de trabalho Git flow – Ramificações de hotfix

As ramificações 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 principal em vez da de desenvolvimento. Esta é a única ramificação que deve ser bifurcada com objetividade a partir da branch principal. Assim que a correção é concluída, ela deve ser mesclada tanto na branch principal quanto da de desenvolvimento (ou na ramificação de lançamento atual) e a branch principal deve ser marcada com um número de versão atualizado.

Ter uma linha de desenvolvimento dedicada para correções de bugs permite que sua equipe aborde problemas sem ter que interromper o resto do fluxo de trabalho ou esperar o próximo ciclo de lançamento. Você pode pensar nas ramificações de manutenção como ramificações de lançamento ad hoc que trabalham com objetividade com a branch principal. Uma ramificação de hotfix pode ser criada usando os seguintes métodos:

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 lançamento, a ramificação de hotfix é mesclada tanto na branch principal quanto na de desenvolvimento.

git checkout master
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch
$ git flow hotfix finish hotfix_branch

Exemplo

A seguir, um exemplo completo demonstrando um fluxo de ramificação de recurso. Supondo que há uma configuração de repositório com uma branch principal.

git checkout master
git checkout -b develop
git checkout -b feature_branch
# work happens on feature branch
git checkout develop
git merge feature_branch
git checkout master
git merge develop
git branch -d feature_branch

Além do fluxo das ramificações de recurso e lançamento, um exemplo para a ramificação de hotfixé o seguinte:

git checkout master
git checkout -b hotfix_branch
# work is done commits are added to the hotfix_branch
git checkout develop
git merge hotfix_branch
git checkout master
git merge hotfix_branch

Resumo

Aqui, é discutido o Gitflow Workflow. Gitflow é um dos muitos estilos de fluxos de trabalho Git que você e sua equipe podem utilizar.

Alguns dos principais aprendizados para saber sobre o Gitflow são:

  • O fluxo de trabalho é ótimo para um fluxo de trabalho de software baseado em lançamentos.
  • O Gitflow oferece à produção um canal dedicado para hotfixes.
     

O fluxo geral do Gitflow é:

  1. Uma ramificação de desenvolvimento é criada a partir da branch principal
  2. Uma ramificação de lançamento é criada a partir da ramificação de desenvolvimento
  3. Ramificações de recurso são criadas a partir da ramificação de desenvolvimento
  4. Quando um recurso é concluído, ele é mesclado na ramificação de desenvolvimento 
  5. Quando a ramificação de lançamento é concluída, ela é mesclada nas ramificações de desenvolvimento e principal
  6. Caso um problema seja detectado na branch principal,uma ramificação de hotfix é criada a partir da principal
  7. Após a conclusão da ramificação de hotfix, ela é mesclada para as ramificações de desenvolvimento e principal

A seguir, aprenda sobre o fluxo de trabalho de bifurcação ou visite a página de comparação de fluxos de trabalho.

Pronto para aprender sobre o Git?

Experimente este tutorial interativo.

Comece agora mesmo