Una de las grandes diferencias que quiso hacer el equipo de SVN con CVS, fue facilitar la creación de ramas de código y habilitar la reincorporación (merge) de estas ramas en el tronco. Y claro que hicieron una gran diferencia, CVS, al mejorar los algoritmos de comparación y mezcla, pero en cuanto al proceso en sí, continuó siendo engorroso (aunque se podría decir que también mejoró un poco) Es por eso que necesito poner esto al aire, para que no se me olvide como hacerlo: El flujo de trabajo es el siguiente:
- Crear la rama
- Hacer cambios en la rama
- Hacer cambios en el trunk (correcciones, mantención)
- Traspasar cambios del trunk a la rama
- commit y update en rama y trunk (sincronizar ambos directorios a la misma revisión sin cambios pendientes)
- merge desde trunk HEAD hacia rama en la revisión de la última sincronización. (ver código más abajo)
- corregir cualquier conflicto producido
- commit de la rama
- update en el trunk
- Repetir 2 a 4 hasta que el trabajo en la rama esté listo.
- Traspasar los cambios de la rama hacia el trunk.
- commit y update en rama y trunk (sincronizar ambos directorios a la misma revisión sin cambios pendientes)
- merge desde rama HEAD hacia trunk en la revisión de la última sincronización. (ver código más abajo)
- corregir cualquier conflicto producido
- commit del trunl
- update en la rama
Como ven, el proceso sigue siendo engorroso al utilizar copias locales y es fácil equivocarse entre las revisiones. El siguiente ejemplo, es un merge del estilo 4.b (desde trunk hacia rama). El directorio de la rama es el directorio actual, y el trunk se encuentra en un directorio más abajo llamado “principal”. El último commit (en en trunk) se hizo en la revisión 3455(HEAD) y el último merge se hizo en la revisión 3452. Entre estas tres revisiones hubieron cambios tanto en el trunk como en la rama, pero solo vamos a traspasar los del trunk hacia la rama.