La respuesta depende del tamaño de su equipo y la calidad de su control de fuente y la capacidad de combinar correctamente conjuntos de cambios complejos. Por ejemplo, en un control de fuente de rama completo como CVS o SVN, la fusión puede ser difícil y es posible que esté mejor con el primer modelo, mientras que si usa un sistema más complejo como IBM ClearCase y con un tamaño de equipo más grande, podría ser mejor con el segundo modelo o una combinación de los dos.
Personalmente, separaría el modelo de rama de características, donde cada característica principal se desarrolla en una rama separada, con subramas de tareas para cada cambio realizado por un desarrollador individual. A medida que las características se estabilizan, se fusionan con el tronco, que se mantiene razonablemente estable y pasa todas las pruebas de regresión en todo momento. A medida que se acerca al final de su ciclo de lanzamiento y todas las ramas de funciones se fusionan, estabiliza y ramifica una rama del sistema de lanzamiento en la que solo realiza las correcciones de errores de estabilidad y los backports necesarios, mientras que el tronco se usa para el desarrollo de la próxima versión y usted nuevamente bifurcarse para nuevas ramas de características. Y así.
De esta manera, el tronco contiene siempre el código más reciente, pero se las arregla para mantenerlo razonablemente estable, creando etiquetas estables (etiquetas) en cambios importantes y fusiones de funciones, las ramas de funciones son de desarrollo rápido con integración continua y las subramas de tareas individuales pueden ser a menudo actualizado desde la rama de funciones para mantener a todos trabajando en la misma función sincronizados, mientras que al mismo tiempo no afecta a otros equipos que trabajan en diferentes funciones.
Al mismo tiempo, tiene a lo largo del historial un conjunto de ramas de lanzamiento, donde puede proporcionar backports, soporte y corrección de errores para sus clientes que, por cualquier motivo, permanecen en versiones anteriores de su producto o incluso en la última versión lanzada. Al igual que con el tronco, no configura la integración continua en las ramas de la versión, se integran cuidadosamente después de pasar todas las pruebas de regresión y otros controles de calidad de la versión.
Si por alguna razón dos características son co-dependientes y necesitan cambios entre sí, puede considerar desarrollar ambas en la misma rama de características o requerir que las características fusionen regularmente partes estables del código en el tronco y luego actualicen los cambios desde tronco para intercambiar código entre ramas troncales. O si necesita aislar esas dos características de otras, puede crear una rama común desde la cual ramifique esas ramas de características y que pueda usar para intercambiar código entre las características.
El modelo anterior no tiene mucho sentido con equipos de menos de 50 desarrolladores y un sistema de control de fuente sin ramas escasas y la capacidad de fusión adecuada como CVS o SVN, lo que haría de todo este modelo una pesadilla para configurar, administrar e integrar.