Preciso de ajuda! Estratégia técnica de branching
Contexto
Onde trabalho estamos atuando com a conversão do nosso front-end, migrando de Windows Web Forms para React para resolver problemas de legado e de vulnerabilidades que o web forms apresenta.
No momento atual do projeto, estamos utilizando ferramentas disponibilizadas pela própria tecnologia da empresa para fazer os controles de comunicação entre o backend (C# ASP .NET) e o front com o React.
O grande problema
Estamos fazendo todas as altearções em uma branch master_tec_25 que foi uma branch criada a partir da branch master do projeto. A branch master não possuí nenhuma implementação necessária para o projeto React funcionar, porém, ela recebe diversas alterações dirárias como:
- Correções
- Implementações
- Melhorias
Com isso, para que a branch do react master_tec_25 não fique desatualizada, fazemos merges da branch master em cima da master_tec_25, mantendo a atualização do restante do produto e das implementações necessárias para o React.
Acontece que, nesses merges, ocorrem diversos conflitos, seja em arquivos que nem se quer alteramos na branch do React, quanto arquivos que realmente mexemos em algo para o projeto React, gerando bastante trabalho de resolver conflitos e ficar aquele medo de ter feito alguma decisão de resolução de conflito incorreta. Suspeitamos desses conflitos aleatórios serem causados pois fizemos migração do Gitlab para o Azure há uns 2 meses.
A prioridade é sempre aceitar o que está vindo do incoming (branch master) para manter o comportamento do produto e resolver os conflitos de arquivos que foram alterados na em ambas as branches, ou seja, que precisam de determinada linha desenvolvida na branch do React (master_tec_25) para o funcionamento.
Possíveis soluções pensadas
1 - Continuar com a mecânica de fazer os merges da master em cima da master_tec_25 de forma frequente para manter a saúde e o alinhamento das branches.
- Ganho: Garante a atualização da branch.
- Perda:
-
- 1 - Consome tempo do desenvolvedor de resolver os conflitos.
-
- 2 - Risco de merge indevido.
2 - Reunir todos os commits feitos para o projeto React com referências de implementações ou palavras chaves e fazer um re-branch em cima da master ao final de cada sessão de implementações para gerar um pacote final
- Ganho: Garante que nada do produto teve seu comportamento alterado/gerado algum bug.
- Perda: Caso fique algum commit de fora importante para o projeto React funcionar pode gerar algum comportamento não desejado/quebrado ao final da geração da branch final.
3 - Ambas as alternativas ao decorrer do projeto
Caso já tenham passado por algo parecido, de que forma resolveram este problema?
Existem estratégias já consolidadas para isso?