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
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
.
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
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çamento
vai 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
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 é:
- Uma ramificação de
desenvolvimento
é criada a partir da branchprincipal
- Uma ramificação de
lançamento
é criada a partir da ramificação dedesenvolvimento
- Ramificações de
recurso
são criadas a partir da ramificação dedesenvolvimento
- Quando um
recurso
é concluído, ele é mesclado na ramificação dedesenvolvimento
- Quando a ramificação de
lançamento
é concluída, ela é mesclada nas ramificações dedesenvolvimento
eprincipal
- Caso um problema seja detectado na branch
principal
,uma ramificação dehotfix
é criada a partir daprincipal
- Após a conclusão da ramificação de
hotfix
, ela é mesclada para as ramificações dedesenvolvimento
eprincipal
A seguir, aprenda sobre o fluxo de trabalho de bifurcação ou visite a página de comparação de fluxos de trabalho.