veo dos caminos diferentes para hacer frente a este:
1.
cambios significativos en el tronco (como una refactorización importante) no se debe hacer en el maletero. Deben hacerse en una rama y fusionarse nuevamente en el tronco cuando estén lo suficientemente estables.
Periódicamente, los cambios en el tronco deben fusionarse con las otras ramas de mantenimiento. La razón por la que solo se fusiona la refactorización en el tronco cuando es estable es porque estos se fusionarán en las ramas de mantenimiento. Sin embargo, si no hay oportunidad de hacer estos cambios estables, entonces la opción 2 sería mejor.
Después de realizar cambios en las ramas de mantenimiento, se pueden fusionar de nuevo en la cajuela.
2.
crear una rama de las ramas de mantenimiento (una rama para cada uno). Esto se usará para fusionar el tronco con cada rama de mantenimiento.(Tenga en cuenta que el uso de SVN externos o equivalentes se debe utilizar para limitar el número de ramas de mantenimiento).
Realice todas las refacciones en la cajuela y combínelas en las ramas de las ramas de mantenimiento. Cuando suelte o piense que el tronco está estable, fusione estas ramas de las liberaciones de mantenimiento en sus ramas respectivas. Estos pueden a su vez fusionarse de nuevo en el tronco.
En efecto, cada rama de mantenimiento se convierte en un "tronco secundario".
Tenga en cuenta que este escenario resalta el equilibrio entre el mantenimiento futuro y el mantenimiento inicial. Cuantas más ramas y diferencias tenga en su código, más mantenimiento por adelantado se requiere. La parte buena es que el mantenimiento incremental es mucho más fácil.
Muchas posibilidades abiertas. ¡Gran respuesta, Greg! –
Por supuesto, uno PODRÍA aplicar la refactorización a las ramas de mantenimiento también. Pero en 99 de 98 casos esto será mucho trabajo. –
@Jens: a menos que planee _desarrollar_ las ramas de "mantenimiento", solo arregle lo que está roto. Sus clientes quieren estabilidad, no código limpio. –