Agora estamos no processo de mudar de svn para git (depois de um ano em convencer as pessoas, sim!) Na minha empresa.
Até agora, isso é tudo para melhor, mas há uma coisinha que atualmente temos em nosso fluxo de trabalho que também não consigo encontrar um bom equivalente.
Atualmente, todos os nossos desenvolvedores trabalham em master. Uma vez a cada trimestre, ramificamos o master no ramo Xx, que mais tarde se tornará nosso último lançamento. Isso significa que nosso repositório svn se parece com isso:
- tronco
- galhos
- 3.8
- 4.1
- 4.2
- ...
Nós realmente não usamos tags.
De vez em quando, há uma correção de bug urgente que é descoberta.
A maneira atual de fazê-lo é:
- Corrigir no mestre
- O SVN mescla o intervalo relevante de confirmações de volta aos ramos relevantes (talvez nosso último lançamento, talvez mais).
Como estamos no setor espacial, nossas filiais têm vida longa e o processo de atualização do cliente é bastante longo, e é por isso que trabalhamos dessa maneira até agora.
Agora, como seria um bom equivalente no git?
Até agora, tentei corrigir o bug em um ramo gerado pelo mestre e, em seguida, mesclar esse ramo novamente no mestre e no 4.3 (por exemplo). O problema é que o ramo de hotfix contém o histórico mestre e todas as confirmações entre mestre e 4.3 também são mescladas, o que não queremos.
Coisas que eu conseguia pensar até agora:
- Analisei o muito bem-sucedido método Git Workflow , e sua solução é corrigir o bug no ramo de lançamento e mesclá-lo novamente, e não o contrário. Isso pode funcionar no nosso caso, mas seria bastante complicado, porque exigiria que já soubéssemos o ramo mais antigo em que queremos corrigir o erro antes de realmente corrigi-lo.
- Outra solução é consertar no master e depois escolher os commits (como fazemos hoje para a fusão svn). A coisa chata aqui é que, nesse caso, perdemos a história do que foi fundido no passado, já que as escolhas da cereja parecem novos comprometimentos e perdemos o relacionamento.
Então, qual é a maneira "boa" de fazer isso? Devemos consertar confirmações na história ou escolher manualmente e acompanhar manualmente o que foi mesclado, ou mesmo algo mais?
Se tiver pouca experiência em produção com o git, tenho certeza que posso ter perdido alguma coisa.