¿Qué control de versiones admite la fusión en múltiples lanzamientos?

Imagine que tiene un gran proyecto de software en el que tiene que admitir varias sucursales (versiones) al mismo time. Por ejemplo, tiene un lanzamiento de producción en el website, un lanzamiento de testing de integración que el cliente testing actualmente, un lanzamiento de testing para su testing de sistemas locales y un lanzamiento de desarrollo donde sus desarrolladores están eliminando nuevas características.

¿Qué sistema de control de versiones admite esta configuration? Mi principal preocupación es que debería apoyar la fusión entre las diferentes versiones: si arreglas un error urgente en tu versión de producción, tampoco quieres verificar todas las otras versiones y corregir el error a mano 5 veces.

Si tiene una respuesta, me gustaría saber qué tan grande fue el proyecto en el que lo aplicó y qué experiencias tuvo. Estoy buscando un sistema que admita explícitamente la fusión por parte del desarrollador: las soluciones con scripts aplicados por los administradores de compilation, etc. no nos ayudarán. (Demasiado peligroso, la fusión debe ser realizada por el desarrollador inmediatamente ya que él / ella sabe mejor qué hacer.) ¡Muchas gracias!

Creo que la mayoría, si no todos, los SCM modernos pueden hacer eso. No necesariamente de forma automática, aunque algunos scripts pueden manejar eso de una manera bastante sencilla.

En el trabajo, usamos Perforce, y hacemos las integraciones a mano (con la ayuda de un script de Perl para copyr la información de la list de cambios). Elegimos cuidadosamente qué lists de cambios van a lanzarse (podemos descartar las de riesgo, por ejemplo).
Para la mayoría de los VCS distribuidos (Mercurial, Bazaar, probablemente Git, etc.), trabajar con varias twigs (o clones) es el flujo de trabajo natural.

En mi experiencia, fusionarme con trabajos de subversión, pero es bastante doloroso (aunque he escuchado que versiones más nuevas son mejores a este respecto). Git y Mercurial se funden correctamente sin problemas.

Team Foundation Server admite cualquier cantidad de sucursales con fusión. Es bastante bueno como es, pero las características de la versión 2010 hacen que la ramificación sea aún más convincente. Ver 10-4 Episodio 4: No más dolor de desarrollo paralelo .

Clearcase manejará múltiples ramificaciones y revisiones, y se fusionará entre cualquiera / todos estos. Puede definir twigs a voluntad, labelrlas como desee, y fusionarlas a / desde ellas. Huelga decir que esto puede ser extraordinariamente complicado e IBM proporciona un administrador de combinación para ayudarlo. Puede visualizar las twigs gráficamente (si eso ayuda).

Clearcase es increíblemente poderoso, pero su administración es compleja y requiere mucho time.

Si realmente desea manejar múltiples lanzamientos pero no está sufriendo el dolor de Clearcase, debería probar algo como Accurev o PlasticSCM .

Accurev es muy poderoso lidiando con sus transmisiones, tienes que acostumbrarte a ellas, pero una vez que lo haces es muy, muy poderoso.

El plástico es más poderoso en términos de manejar un número ilimitado de twigs (y sus fusiones correspondientes) algo más fácil de decir que de hacer. Tienes toda la flexibilidad mencionada para el buen CC, pero sin los commands arcanos ni las configuraciones extrañas.

Aquí tiene el explorador de sucursales rastreando múltiples twigs

texto alternativo

La respuesta a esta pregunta es una de process primero, y una cadena de herramientas en segundo lugar.

Debe decidir cómo desea acceder a las versiones conocidas (por ejemplo, "¿qué hay en producción?"), Cómo desea realizar cambios en ellas y cómo desea diseminar los cambios a otras versiones.

La mayoría de los sistemas VCS que son Subversion-Or-Better admitirán flujos de trabajo comunes. Aquí hay uno que es común:

  1. El desarrollo está en el maletero
  2. Cuando llegue el momento de una publicación, etiquete el enlace, por ejemplo, 1.3.0
  3. Cree una twig fuera del tronco en la label que creó, por ejemplo, 1.3.x.
  4. Libera el código basado en la '' label '' (ej. 1.3.0)
  5. Reanudar el desarrollo de nuevas funciones en el maletero
  6. Si necesita corregir un error en la producción, consulte la twig y corríjala. Suelta eso como de costumbre, creando una nueva label (ej. 1.3.1).
  7. Cambie los cambios de su twig al tronco según sea necesario
  8. Repita los pasos 6 y 7 según sea necesario hasta su próximo lanzamiento.

Aquí hay otra práctica común:

  1. El desarrollo está en el maletero
  2. Cuando llegue el momento de una publicación, etiquete el tronco
  3. Lanzamiento a producción basado en la '' label '' (ej. 1.3.0)
  4. Si se encuentra un error, crea una twig para corregir ese error contra la label
  5. Comprometerse en la nueva twig y volver a labelr (ej. 1.3.1)
  6. Combina esa twig de nuevo al tronco
  7. Repite los pasos 4, 5 y 6 cada vez que encuentres un error

Estos son muy comunes y simples de implementar / comprender; son fácilmente compatibles con la mayoría de los sistemas de control de versiones. Si obtiene processs más complejos, networkingucirá el set de herramientas disponible, pero posiblemente tendrá más poder.

Es posible configurar Telelogic CM Synergy / CM para admitir dicha configuration.

Lo bueno es que todas las versiones "superiores" se actualizan automáticamente sin acciones de desarrollador o administrador de compilation si el file no se modifica en esas versiones. Si se modifica el file modificado, el desarrollador recibe una notificación de inmediato al registrarse y debe fusionar el material. Admite la agrupación de cambios relacionados en tareas y requestes de cambio, y tiene un sistema de seguimiento asociado para ellos.

Lo malo es que es realmente grande y lento, necesita mucho time de compilation y la integración del eclipse es casi inutilizable. Probablemente necesites un administrador de time completo para cada 5 o 10 desarrolladores.