Somos uma pequena loja ISV e geralmente enviamos uma nova versão de nossos produtos todos os meses. Usamos o Subversion como nosso repositório de código e o Visual Studio 2010 como nosso IDE. Estou ciente de que muitas pessoas estão defendendo o Mercurial e outros sistemas de controle de fonte distribuída, mas neste momento não vejo como poderíamos nos beneficiar deles, mas posso estar errado.
Nosso principal problema é como manter ramificações e tronco principal em sincronia.
Aqui está como fazemos as coisas hoje:
- Liberar nova versão (criar automaticamente uma tag no Subversion)
- Continue trabalhando no tronco principal que será lançado no próximo mês
E o ciclo se repete todo mês e funciona perfeitamente. O problema surge quando um release de serviço urgente precisa ser lançado. Não podemos liberá-lo do tronco principal (2), pois está em desenvolvimento pesado e não é estável o suficiente para ser liberado com urgência.
Nesse caso, fazemos o seguinte:
- Crie uma ramificação a partir da tag que criamos na etapa (1)
- Bug fix
- Teste e liberação
- Empurre a alteração de volta para o tronco principal (se aplicável)
Nosso maior problema é mesclar esses dois (ramo com principal). Na maioria dos casos, não podemos confiar na mesclagem automática porque, por exemplo:
- muitas mudanças foram feitas no tronco principal
- mesclar arquivos complexos (como arquivos XML do Visual Studio etc.) não funciona muito bem
- outro desenvolvedor / equipe fez alterações que você não entende e não pode simplesmente mesclá-las
Então, o que você acha que é a melhor prática para manter essas duas versões diferentes (branch e main) sincronizadas. O que você faz?