Un colega mío me dijo que está pensando en hacer nuestro servidor de CI para compromete revert que no pasaron la construcción, por lo que el HEAD
en master
es siempre estable (como en la acumulación de pasar por lo menos).
¿Es esta una práctica recomendada o puede ser más problemático que simplemente dejarlo master
roto hasta que el desarrollador lo arregle?
Mi opinión es que revertir el commit hará más compleja la tarea de leer el commit y el arreglo (el desarrollador tendrá que revertir el revert y luego confirmar el arreglo, lo que también desordenará git log
) y deberíamos dejar el commit y luego confirmar el fijar. Aunque veo algunas ventajas en tener master
estabilidad, esta reversión de confirmaciones fallidas no me convence.
editar: No importa si es master
o cualquier otra rama de desarrollo, pero la pregunta sigue siendo la misma: ¿debería el sistema CI revertir una confirmación que falló la compilación?
otra edición (larga): Ok, la estamos usando git
de una manera extraña. Creemos que el concepto de sucursales va en contra de CI real, porque comprometerse con una sucursal lo aísla de los otros desarrolladores y sus cambios, y agrega tiempo cuando tiene que reintegrar su sucursal y lidiar con posibles conflictos. Si todos se comprometen con master
estos conflictos, se reducen al mínimo y cada confirmación pasa todas las pruebas.
Por supuesto, esto lo obliga a presionar solo estable (o rompe la compilación) y programar con más cuidado para no romper la compatibilidad con versiones anteriores o alternar características al introducir nuevas características.
Hay compensaciones cuando se hace CI de esta o de esa manera, pero eso está fuera del alcance de la pregunta (vea la pregunta relacionada para esto). Si lo prefiere, puedo reformular la pregunta: un pequeño equipo de desarrolladores trabajan juntos en una rama de características. Si un desarrollador comete algo que rompe la compilación para esa rama, ¿debería el sistema de CI revertir el compromiso o no?
master
para empezar. Para eso se utilizan las ramas de desarrollo y características. Esos cambios van entonces en algo así como una rama de integración donde puedes probar si todas las nuevas características de varios desarrolladores funcionarán juntas y solo si esto se prueba puede entrar en master. O al menos ese es un posible flujo de trabajo.