Estou tentando escolher um fluxo de trabalho Git que seja mais apropriado para o nosso produto. Aqui estão os parâmetros:
- Fazemos alguns lançamentos importantes por ano, digamos 10 no máximo
- Temos várias versões do nosso produto ativas ao mesmo tempo (algumas pessoas estão na v10.1, outras na v11.2, etc.)
- Precisamos ser capazes de trabalhar em várias versões ao mesmo tempo (para que possamos trabalhar na v12.1, mas, ao chegarmos ao final da versão, começamos a trabalhar na v12.2 ao mesmo tempo)
- Precisamos poder corrigir lançamentos quando forem encontrados erros críticos
Até agora, aqui está a maneira que eu acho que poderia funcionar:
- É utilizado um repositório remoto único
- Criar ramificação 12.1 do mestre
- Crie ramificações de recursos com base em 12.1, confirme-as e junte-as novamente em 12.1, pressione
- Quando precisarmos começar a trabalhar em versões futuras, crie um novo ramo 12.2 com base em 12.1
- A partir de então, ao trabalhar em um recurso para 12.1, crie ramificação a partir de 12.1, confirme as alterações e mescle em 12.1 e 12.2, pressione
- Se estiver trabalhando em um recurso para 12.2, crie uma ramificação a partir da 12.2, confirme as alterações e mescle apenas na 12.2, pressione
- Quando a liberação 12.1 for concluída, mescle-a no mestre e identifique o ramo mestre com o 12.1
- Se um hotfix for necessário, crie um ramo de hotfix a partir do ramo de versão mais antigo que precisa, confirme as alterações e mescle novamente em todos os ramos de lançamento para esse lançamento e para os lançamentos futuros que possam ser afetados; se a ramificação de versão estável mais recente foi afetada, mescle-a no master.
Tenho algumas preocupações:
- Não tenho certeza de que a fusão de hotfixes de ramificações antigas em ramificações novas será um processo tranquilo, especialmente se houver muitas alterações sobrepostas; seria mais inteligente aplicar hotfix manualmente em cada ramificação nos casos em que parece haver conflitos
- Os modelos de fluxo de trabalho que vi parecem não manter muito ativos os ramos de lançamento, uma vez feito, o lançamento é mesclado no mestre, marcado e removido. Meu problema com isso é que não tenho uma boa idéia de como gerenciar o estado do lançamento, se tudo o que tenho são tags no master, parece mais fácil de hotfix em um ramo e, em seguida, tenho um release no qual sempre posso voltar para que possui o hotfix mais recente (posso até marcar os hotfixes no lançamento). Não sei se há uma maneira de voltar ao master e, de alguma forma, ter uma cópia do release com os hotfixes aplicados e atualizar essa tag.
Os comentários são apreciados sobre coisas que posso ter esquecido ou sobre maneiras melhores de realizar as coisas, de acordo com os requisitos que especifiquei.