Node:Fusión de cambios desde las ramas al tronco, Next:, Previous:Conceptos básicos sobre ramas, Up:Ramas



Fusión de cambios desde las ramas al tronco

Ahora que hemos aplicado la corrección del fallo a la rama, sincronicemos la copia de trabajo con la revisiones más recientes presentes en el tronco y veamos si también allí es necesaria la corrección. Vamos a obtener la copia de trabajo desde la rama empleando "update -A" (en este aspecto, las marcas de rama son como cualquier otra propiedad pegadiza) y entonces ver las diferencias respecto a la rama que acabamos de dejar:

floss$ cvs -q update -d -A
U hello.c
U b-subdir/random.c
floss$ cvs -q diff -c -r Release-1999_05_01-bugfixes
Index: hello.c
===================================================================
RCS file: /usr/local/cvs/miproyecto/hello.c,v
retrieving revision 1.5.2.1
retrieving revision 1.6
diff -c -r1.5.2.1 -r1.6
*** hello.c   1999/05/05 00:15:07     1.5.2.1
--- hello.c   1999/05/04 20:19:16     1.6
***************
*** 4,9 ****
  main ()
  {
    printf ("¡Hola, mundo!\n");
!   printf ("entre el saludo y la despedida\n");
    printf ("¡Adiós, mundo!\n");
  }
--- 4,10 --
  main ()
  {
    printf ("¡Hola, mundo!\n");
!   printf ("entre hola y adiós\n");
    printf ("¡Adiós, mundo!\n");
+   /* un comentario en la última línea */
  }
Index: b-subdir/random.c
===================================================================
RCS file: /usr/local/cvs/miproyecto/b-subdir/random.c,v
retrieving revision 1.2.2.1
retrieving revision 1.2
diff -c -r1.2.2.1 -r1.2
*** b-subdir/random.c 1999/05/05 00:15:07     1.2.2.1
--- b-subdir/random.c 1999/04/19 06:35:27     1.2
***************
*** 4,8 ****
  void main ()
  {
!   printf ("Un número aleatorio.\n");
  }
--- 4,8 --
  void main ()
  {
!   printf ("un número aleatorio\n");
  }
floss$

El comando "diff" muestra que hay una línea que difiere en la revisión en rama de hello.c, y que la revisión del tronco de este fichero tiene un comentario cerca del final que la revisión de la rama no tiene. Mientras, en random.c, la revisión en la rama tiene una "U" mayúscula y un punto, mientras que en la revisión presente en el tronco no aparece esto.

Para fusionar los cambios de una rama con la actual copia de trabajo, haga una actualización con la opción -j (la misma j de "juntar" que utilizamos anteriormente para revertir un fichero a una revisión más antigua):

floss$ cvs -q update -d -j Release-1999_05_01-bugfixes
RCS file: /usr/local/cvs/miproyecto/hello.c,v
retrieving revision 1.5
retrieving revision 1.5.2.1
Merging differences between 1.5 and 1.5.2.1 into hello.c
RCS file: /usr/local/cvs/miproyecto/b-subdir/random.c,v
retrieving revision 1.2
retrieving revision 1.2.2.1
Merging differences between 1.2 and 1.2.2.1 into random.c
floss$ cvs -q update
M hello.c
M b-subdir/random.c
floss$ cvs -q ci -m "fusión con la rama Release-1999_05_01-bugfixes"
Checking in hello.c;
/usr/local/cvs/miproyecto/hello.c,v  <-  hello.c
new revision: 1.7; previous revision: 1.6
done
Checking in b-subdir/random.c;
/usr/local/cvs/miproyecto/b-subdir/random.c,v  <-  random.c
new revision: 1.3; previous revision: 1.2
done
floss$

Este ejemplo toma los cambios habidos desde la raíz de la rama hasta su extremo final y más reciente, y los fusiona con la copia de trabajo actual, que a partir de ese momento mostrará esas mismas modificaciones como si sus ficheros hubieran sido editados a mano para llevarlos a ese estado. Los cambios son entonces aplicados al tronco, puesto que nada había cambiado en el repositorio cuando una copia de trabajo sufrió un proceso de fusión.

Si bien en este ejemplo no se han producido conflictos, es bastante posible (e incluso probable) que hubiera algunos en una fusión hecha en un proyecto real, en cuyo caso estos conflictos tendrían que resolverse igual que cualquier otro conflicto, para a continuación poder aplicar los cambios.