En un sentido general, para proyectos a largo plazo que pueden tener múltiples lanzamientos durante el ciclo de vida de los productos y requieren soporte de productos anteriores, ¿cuál es la mejor manera de manejar versiones de productos y ramificaciones de la base de código?
En un sentido más específico, suponga que existe un control de versión distribuido adecuado (es decir, git) y que los equipos son de tamaño pequeño a grande y que el desarrollador puede estar trabajando en múltiples proyectos a la vez. El problema principal que se enfrenta es que existe una obligación contractual de admitir versiones antiguas tal como existían en ese momento, lo que significa que el nuevo desarrollo no puede parchear el código antiguo (los productos de Microsoft Office podrían ser un ejemplo de esto, solo obtiene parches para el año de la característica que posee).
Como resultado, la versión actual del producto es un poco complicada ya que cada producto principal tiene múltiples dependencias, cada una con sus propias versiones que pueden cambiar entre lanzamientos anuales. Del mismo modo, si bien cada producto tiene su propio repositorio, la mayor parte del trabajo no se realiza en el tronco de la fuente principal, sino en una rama para el lanzamiento de productos de ese año con una nueva rama cuando se lanza el producto para que pueda ser compatible. Esto a su vez significa que obtener la base de código de un producto no es una cuestión simple como uno podría pensar al usar el control de versiones.