Seguindo o git-flow, como você deve lidar com um hotfix de uma versão anterior?

101

Se você tentar seguir o modelo de ramificação git-flow, documentado aqui e com ferramentas aqui , como você deve lidar com essa situação:

Você fez uma versão 1.0 e uma versão 2.0. Então você precisa fazer um hotfix para 1.0. Você cria uma ramificação de hotfix da marca 1.0 e implementa a correção lá. Mas e então?

Normalmente, você mesclaria com o master e colocaria uma tag de versão 1.1 lá. Mas você não pode mesclar 1.1 a um ponto após 2.0 no mestre.

Eu acho que você poderia colocar a marca de lançamento no branch de hotfix, mas isso criaria um branch permanente ao lado do mestre que conteria uma marca de versão. É esse o caminho certo?

Klas Mellbourn
fonte
possível duplicata do Git-flow e master com múltiplos release-branches paralelos [embora a outra questão seja mais recente, ela tem respostas mais úteis, então eu sinalizei esta questão como duplicata]
danio

Respostas:

74

Parece que existe um conceito de branch de "suporte" no fluxo git. Isso é usado para adicionar um hotfix a uma versão anterior.

Este tópico contém mais informações , com estes exemplos:

git checkout 6.0
git checkout -b support/6.x
git checkout -b hotfix/6.0.1

... faça sua correção, então:

git checkout support/6.x
git merge hotfix/6.0.1
git branch -d hotfix/6.0.1
git tag 6.0.1

ou usando git flowcomandos

git flow support start 6.x 6.0
git flow hotfix start 6.0.1 support/6.x

... faça alterações então:

git flow hotfix finish 6.0.1
Klas Mellbourn
fonte
? manter essas ramificações de suporte ou excluí-las após algum tempo
Evan Hu
@EvanHu bem, com certeza mantenha-os enquanto você tiver aquele branch em produção em algum lugar. Depois disso, é uma questão de registro histórico. Você pode querer saber como os hotfixes foram corrigidos se eles ocorrerem novamente.
Klas Mellbourn
Deve-se fazer um lançamento no hot fix, certo? Como podemos fazer isso?
Ravindranath Akila de
33

Pergunta interessante! O fluxo vinculado presume que o mestre pode rastrear a produção. Isso só funciona se as versões de produção estiverem estritamente aumentando. Isso normalmente é verdade para um site que possui apenas uma versão de produção.

Se você tiver que manter várias versões de produção, uma ramificação para rastrear a produção não é suficiente. Uma solução é não usar o mestre para rastrear a produção. Em vez disso, use ramos como release1, release2, etc.

Nessa abordagem, você pode nem precisar de um branch de hotfix. Você pode corrigir o problema na release1filial. Quando a correção for boa o suficiente, crie uma release1.1tag no release1branch.

Andomar
fonte
Você pode alterar o git-flow para definir as tags de lançamento nos ramos de lançamento. Essa é uma mudança bastante importante. Isso quebraria os scripts atuais. Além disso, o que o mestre conteria?
Klas Mellbourn
3
O git-flowferramental não é adequado se você tiver que oferecer suporte a várias versões de produção. No fluxo de trabalho proposto nesta resposta, o master não é usado de forma alguma. Você poderia nomear o branch master, afinal é apenas um nome.
Andomar
GitFlow suporta o rastreamento de mais de uma versão de produção: gitversion.readthedocs.io/en/latest/git-branching-strategies/…
Andre L
7

git-flow assume que você está suportando apenas uma linha de lançamento por vez, convenientemente rastreada pelo master. Se estiver mantendo mais de 1, você precisará modificar o processo git-flow para ter vários rastreadores de suas versões separadas que você está oferecendo (master-1, master-2). Você pode continuar a usar master para rastrear a linha de lançamento mais recente, além de ou no lugar de um rastreador específico para a linha de lançamento mais recente (master em vez de master-2).

Infelizmente, qualquer ferramenta git-flow que você esteja usando provavelmente precisará ser modificada, mas espero que você esteja familiarizado o suficiente com o processo git-flow para lidar com esse caso específico diretamente com os comandos git.

Bert F
fonte
Se você modificar o git flowprocesso, será algo diferente. Se algum modelo deve ser corrigido (não apenas estendido), ele é tão bem-sucedido quanto seu autor afirma. Verifique minha resposta ao tópico que estamos discutindo.
Victor Yarema
0

git config --add gitflow.multi-hotfix true Este comando parece funcionar para mim!

Laila
fonte