O problema
Estou em um projeto de software que tem cerca de 10 desenvolvedores, compartilhamos o código-fonte via Mercurial. Temos um ramo de desenvolvimento e produção por versão. Repetidamente, durante o curso do projeto, tivemos o código fonte de uma ramificação, ou seja, a v1, entrando nas ramificações de patches e manutenção para versões anteriores do software, ou seja, v2.
Isso resulta no tempo gasto no backup da confirmação incorreta ou no código errado (possivelmente não-QAd) atingindo e sendo implantado na ramificação errada, se não percebermos que o código foi para a ramificação errada.
Nossa filial e mesclar design / método
v1-test v1-patch1 v1-patch2
^---------^-----------^ v1-prod
/ / \ \
-----------------------/ \ \ v1-dev
\ \ \
--------------------------\ v2-dev
\ \ \
^-------^------------- v2-prod
v2-test v2-patch1
Portanto, trabalharemos em uma ramificação de desenvolvimento de versão, até que esteja pronta , ramificá-la para uma única ramificação de teste / UAT / Produção, onde todas as liberações e manutenção são feitas. Tags são usadas para criar versões deste ramo. Enquanto a v1 estiver sendo testada, uma ramificação será feita para a v2 e os desenvolvedores começarão a trabalhar em novos recursos.
O que tende a acontecer é que um desenvolvedor compromete o trabalho devido à ramificação v2-dev em v1-dev ou v1-prod, ou pior, mescla v2-dev em v1-prod (ou erros semelhantes).
Dizemos à maioria dos desenvolvedores para não acessar as ramificações -prod , mas o código ainda se infiltra. Um grupo de desenvolvedores mais seniores "cuida" da ramificação -prod.
Deve-se notar que, embora a v2 tenha acabado de iniciar o desenvolvimento, ainda existem alguns patches bastante pesados entrando na v1 para corrigir problemas. Ou seja, a v1 pode não estar apenas recebendo o pequeno e estranho patch.
O que tentamos até agora
- Ter um ramo -prod separado, com porteiros. Um ramo de produtos deve gerar avisos por meio de seu nome e a maioria dos desenvolvedores não precisa estar nesse ramo. Isso realmente não reduziu o problema.
- Sensibilização para esse problema entre os desenvolvedores, para tentar torná-los mais vigilantes. Novamente, isso não teve muito sucesso.
Possíveis razões que vejo para os desenvolvedores que se comprometem com a ramificação errada
- Projeto de filial muito complexo
- Tendo desenvolvimento ativo em vários ramos em paralelo. (O projeto apresenta sintomas de uso do modelo de avalanche .)
- Os desenvolvedores não entendem o DVCS o suficiente
Perguntas que li que eram de certa forma relevantes
Li esta pergunta sobre não me comprometer com o ramo errado e acho que as respostas sobre as dicas visuais podem ser úteis. No entanto, não estou totalmente convencido de que os problemas que estamos enfrentando não sejam sintomas de um problema mais fundamental.
Com as pistas visuais, podemos incorporá-las facilmente na linha de comando, no entanto, cerca de metade da equipe usa eclipse, o que não sei ao certo como incorporar pistas visuais.
Questão
Quais métodos, na forma de software, gerenciamento de projetos ou governança, podemos usar para reduzir (interromper, idealmente) as confirmações para o ramo errado, gastando nosso tempo ou sujando nosso código implantado?
Comentários específicos sobre as razões pelas quais acredito que podem estar contribuindo, conforme descrito acima, serão apreciados, mas isso não deve limitar sua resposta.