Somos una pequeña tienda de ISV y generalmente enviamos una nueva versión de nuestros productos cada mes. Usamos Subversion como nuestro repositorio de código y Visual Studio 2010 como nuestro IDE. Soy consciente de que muchas personas abogan por Mercurial y otros sistemas de control de fuentes distribuidas, pero en este momento no veo cómo podríamos beneficiarnos de ellos, pero podría estar equivocado.
Nuestro principal problema es cómo mantener sincronizadas las ramas y el tronco principal.
Así es como hacemos las cosas hoy:
- Lanzar nueva versión (crear automáticamente una etiqueta en Subversion)
- Continúe trabajando en la troncal principal que se lanzará el próximo mes
Y el ciclo se repite todos los meses y funciona perfectamente. El problema surge cuando un lanzamiento urgente del servicio necesita ser lanzado. No podemos liberarlo de la troncal principal (2) ya que está bajo un desarrollo intenso y no es lo suficientemente estable como para ser liberado con urgencia.
En tal caso hacemos lo siguiente:
- Cree una rama a partir de la etiqueta que creamos en el paso (1)
- Arreglo del fallo
- Prueba y lanzamiento
- Empuje el cambio de regreso al tronco principal (si corresponde)
Nuestro mayor problema es fusionar estos dos (rama con main). En la mayoría de los casos, no podemos confiar en la fusión automática porque, por ejemplo:
- Se han realizado muchos cambios en el tronco principal
- fusionar archivos complejos (como archivos XML de Visual Studio, etc.) no funciona muy bien
- otro desarrollador / equipo realizó cambios que no comprende y no puede simplemente fusionarlos
Entonces, ¿qué crees que es la mejor práctica para mantener estas dos versiones diferentes (rama y principal) en sincronía. ¿Qué haces?