El problema
Estoy en un proyecto de software que tiene unos 10 desarrolladores, compartimos el código fuente a través de Mercurial. Tenemos una rama de desarrollo y producción por lanzamiento. Repetidamente durante el curso del proyecto, hemos tenido código fuente de una rama, es decir, v1, entrando en parches y ramas de mantenimiento para versiones anteriores de software, es decir, v2.
Esto da como resultado que se dedique el tiempo de retroceso al commit incorrecto o que el código incorrecto (posiblemente no QAd) llegue y se implemente en la rama incorrecta si no notamos que el código ha entrado en la rama incorrecta.
Nuestro diseño / método de sucursal y combinación
v1-test v1-patch1 v1-patch2
^---------^-----------^ v1-prod
/ / \ \
-----------------------/ \ \ v1-dev
\ \ \
--------------------------\ v2-dev
\ \ \
^-------^------------- v2-prod
v2-test v2-patch1
Por lo tanto, trabajaremos en una rama de desarrollo de lanzamiento, hasta que se considere lista , bifurque para una sola rama de prueba / UAT / Producción, donde se realizan todos los lanzamientos y mantenimiento. Las etiquetas se utilizan para crear versiones de esta rama. Mientras se prueba v1, se creará una rama para v2 y los desarrolladores comenzarán a trabajar en nuevas características.
Lo que suele suceder es que un desarrollador compromete el trabajo debido a v2-dev branch en v1-dev o v1-prod, o peor aún, fusionan v2-dev en v1-prod (o errores similares).
Le decimos a la mayoría de los desarrolladores que no accedan a las ramas -prod , sin embargo, el código todavía se cuela. Un grupo de desarrolladores más senior 'cuida' la rama -prod.
Cabe señalar que, si bien v2 acaba de comenzar el desarrollo, es posible que todavía haya algunos parches bastante fuertes en v1 para solucionar problemas. Es decir, v1 puede no solo estar recibiendo un parche pequeño e impar.
Lo que hemos intentado hasta ahora
- Tener una rama de producto separada, con porteros. Una rama -prod debería generar advertencias a través de su nombre y la mayoría de los desarrolladores no necesitan estar en esa rama. Esto realmente no ha reducido el problema.
- Creó la conciencia de este problema entre los desarrolladores, para tratar de hacerlos más vigilantes. Nuevamente, esto no ha sido muy exitoso.
Posibles razones que veo para los desarrolladores que se comprometen con la rama incorrecta
- Un diseño de sucursal demasiado complejo
- Tener desarrollo activo en múltiples ramas en paralelo. (El proyecto exhibe síntomas de uso del modelo de avalancha ).
- Los desarrolladores no entienden el DVCS lo suficientemente bien
Preguntas que he leído que fueron algo relevantes
He leído esta pregunta sobre no comprometerse con la rama equivocada y creo que las respuestas con respecto a las señales visuales pueden ser útiles. Sin embargo, no estoy completamente convencido de que los problemas que estamos experimentando no sean síntomas de un problema más fundamental.
Con las pistas visuales, podemos incorporarlas fácilmente en la línea de comando, sin embargo, aproximadamente la mitad del equipo usa eclipse, lo que no estoy seguro de cómo incorporar señales visuales.
Pregunta
¿Qué métodos, en forma de software, gestión de proyectos o gobernanza, podemos usar para reducir (idealmente) los compromisos con la sucursal equivocada que toma nuestro tiempo o ensucia nuestro código implementado?
Se agradecería un comentario específico sobre las razones que creo que pueden estar contribuyendo como se describe anteriormente, pero esto no debería limitar su respuesta.