¿Qué hace que el ciclo de lanzamiento de software sea más corto con DVCS en comparación con CVCS?
Estoy de acuerdo con Bart en que la razón principal es el modelo de ramificación utilizado, pero el tipo de sistema de control de versiones afecta directamente qué modelos de ramificación son viables. Entonces tenemos dos subpreguntas. ¿Qué modelo de ramificación soportan mejor los sistemas distribuidos y por qué acelera el ciclo de lanzamiento?
La diferencia fundamental entre el control de versiones centralizado y distribuido es que sin la autoridad central no se puede aplicar una línea de tiempo lineal. Por lo tanto, para hacer posible el control de versiones distribuidas, estos sistemas necesariamente tenían que definir el historial como un gráfico acíclico dirigido, donde cada revisión simplemente tiene un identificador único, una o más revisiones principales y puede tener muchas revisiones secundarias arbitrarias de las que quizás ni siquiera esté al tanto, porque aún no se sincronizó con el sistema donde se crearon.
Resulta que este enfoque se presta muy bien a la ramificación. No tiene que hacer nada para obtener una sucursal, simplemente siempre tiene una. Por lo tanto, puede sumergirse directamente en el trabajo de cabeza y dejar decidir cuándo y dónde fusionarlo o incluso dónde guardarlo y con qué nombre hasta que sepa si realmente va de la manera que necesita.
En contraste, todos los sistemas centralizados mantienen la historia como un conjunto de ramas con una secuencia lineal de revisiones. Por lo tanto, debe decidir de antemano si necesitará una rama, asignarle un nombre y crearla explícitamente. Esto es bastante doloroso cuando aún no sabes lo que vale la idea y, a menudo, simplemente no lo sabes antes de comenzar a programar. Complicado por el hecho de que en la mayoría de los sistemas centralizados los nombres de las sucursales son globales, significativos, a menudo persistentes y no se pueden cambiar fácilmente, mientras que en todos los sistemas distribuidos principales son solo nombres locales que se pueden cambiar a su antojo y reciclar libremente. Y por el hecho de que todas las operaciones de bifurcación y fusión suelen ser un poco más lentas en CVCS.
Por lo tanto, DVCS facilita las ramas y, por lo tanto, los equipos que usan ramas DVCS todo el tiempo, mientras que los equipos que usan CVCS las evitarán la mayor parte del tiempo.
Ahora, ¿por qué usar ramas permite lanzamientos más frecuentes? Bueno, cada equipo subestimará una tarea de vez en cuando, a menudo cuando aparece un error difícil de rastrear. Los equipos que usan sistemas centralizados generalmente realizan toda la depuración, y la mayoría del desarrollo, en el tronco, porque las ramas son inconvenientes. Por lo tanto, no pueden liberar hasta que eliminen la mayoría de los errores y tengan que intercalar las fases de desarrollo y depuración.
Por el contrario, en los sistemas distribuidos donde todo el trabajo se realiza en ramas, estos se pueden combinar para probar, probar, corregir errores y solo el trabajo que pasa las pruebas se fusionó por separado con el tronco. Como resultado, el tronco tiene muy pocos errores y, por lo tanto, se puede liberar con más frecuencia, generalmente cada vez que aparece una característica importante.
También ayuda que siempre que haya un cambio en las prioridades, el trabajo en progreso se pueda archivar trivialmente con el enfoque de ramificación utilizado con los sistemas distribuidos. En la mayoría de los proyectos reales, los cambios en las prioridades ocurren todo el tiempo.