¿Qué estrategia de ramificación debo usar durante el desarrollo / mantenimiento de una aplicación web?

Estoy tratando de decidir la mejor estrategia de ramificación para un proyecto de aplicación web. Esto es lo que se me ocurrió hasta ahora y agradecería mucho cualquier comentario y experiencia.

A mi modo de ver, hay dos estrategias principales de ramificación: "ramificar por lanzamiento" y "ramificar por característica".

"Rama por lanzamiento": El desarrollo se lleva a cabo en el tronco. Cuando se acerca el momento de un lanzamiento, se crea una rama para ese lanzamiento. Esta rama se estabiliza / prueba y finalmente se realiza una liberación. Después del lanzamiento, la rama se fusiona nuevamente en el tronco, mientras se mantiene viva la rama de liberación para la corrección de errores. Se aplica una corrección de errores, luego se fusiona en el tronco (si el desarrollo en el tronco no ha eclipsado el error por otros medios). Se agregan nuevas funciones al tronco y no afectan la rama de lanzamiento. Cuando se acerca un nuevo tiempo de lanzamiento, se crea una nueva rama de lanzamiento a.s.o.

"Rama por característica": El enlace troncal siempre es el enlace troncal de "producción" (el código que está activo). Las correcciones de errores se envían directamente al tronco. Las características para la próxima versión se desarrollan en ramas de características. Las correcciones de errores se fusionan de vez en cuando en las ramas de características. Cuando llega el momento de la liberación, las ramas de características se fusionan en el tronco y el ciclo de vida continúa.

Ahora, según veo, la gran diferencia práctica entre estas dos estrategias es que "por lanzamiento" le permite mantener diferentes versiones de producción de su software (cuando el cliente A tiene la versión 1 y el cliente B versión 1.5, el cliente es el cliente que paga en esto caso). Por el contrario, utilizando la estrategia "por función" solo puede admitir la versión de producción actual (todos los clientes utilizan la última versión).

Ya que en un típicoAplicación web todos los clientes están utilizando la misma versión "más reciente" (dado que todos acceden al mismo servidor), supongo que el enfoque "por función" es el más utilizado. Elimina la necesidad de fusionar "en toda la jerarquía", por ejemplo, cuando se debe aplicar una corrección de errores a las 3 versiones de lanzamiento.

Entonces, mi estado actual es que debería ir con "ramificar por función". Si es importante, mi equipo no es muy hábil.

Respuestas a la pregunta(4)

Su respuesta a la pregunta