Node:Examinar y deshacer cambios, Next:, Previous:Averiguar quién hizo qué (leyendo informes de cambios), Up:Un día con CVS



Examinar y deshacer cambios

Supongamos que, mientras estamos leyendo los informes de cambios, mperez se percata de que jluis hizo el cambio más reciente a hello.c:

revision 1.4
date: 1999/04/20 04:14:37;  author: jluis;  state: Exp;  lines: +1 -1
alterada la línea del medio

y se pregunta qué hizo jluis exactamente. En términos formales, la pregunta que se hace mperez es, "¿Cuál es la diferencia entre mi revisión (1.3) de hello.c, y la revisión de jluis que vino a continuación (1.4)?" La forma de averiguarlo es utilizar el comando diff, pero esta vez comparando las dos últimas revisiones utilizando la opción de comando -r para especificar ambos números:

paste$ cvs diff -c -r 1.3 -r 1.4 hello.c
Index: hello.c
===========================================================
RCS file: /usr/local/cvs/miproyecto/hello.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -c -r1.3 -r1.4
*** hello.c     1999/04/20 02:30:05     1.3
--- hello.c     1999/04/20 04:14:37     1.4
***************
*** 4,9 ****
  main ()
  {
    printf ("¡Hola, mundo!\n");
!   printf ("entre hola y adiós\n");
    printf ("¡Adiós, mundo!\n");
  }
--- 4,9 --
  main ()
  {
    printf ("¡Hola, mundo!\n");
!   printf ("ENTRE HOLA Y ADIÓS.\n");
    printf ("¡Adiós, mundo!\n");
  }
paste$

El cambio es bastante obvio, visto de esta forma. Dado que los números de revisión se dan en orden cronológico (por lo general, una buena idea), el comando los muestra de forma ordenada. Si sólo se da un número de revisión, CVS utiliza como segundo número la revisión actual del fichero presente en la copia de trabajo.

Cuando mperez ve estos cambios, decide al momento que le gusta más su forma de hacer las cosas, así que decide "deshacerlo", esto es, ir una revisión atrás.

Sin embargo, esto no significa que desee perder su revisión 1.4. Si bien en un sentido estrictamente técnico es probablemente posible conseguir este efecto en CVS, raramente existe razón alguna para hacerlo. Es mucho más deseable guardar la revisión 1.4 en el historial y hacer una nueva revisión 1.5 idéntica a la 1.3: de esta forma, la operación de deshacer se convierte en parte del historial del fichero.

La única pregunta es, ¿cómo puede usted obtener el contenido de la revisión 1.3 y ponerlo en la 1.5?

En este caso en particular, dado que el cambio es muy sencillo, mperez puede seguramente limitarse a editar el fichero a mano para hacerlo idéntico a la revisión 1.3, y entonces enviarlo al repositorio. Sin embargo, si los cambios son más complejos (como suele ocurrir en un proyecto real), intentar recrear a mano la revisión antigua será irremediablemente algo donde se producirán errores. Por tanto, vamos a hacer que mperez utilice CVS para obtener y reenviar el contenido de la antigua revisión.

Hay dos formas igualmente buenas de conseguir esto: la lenta y dolorosa, y la rápida y vistosa. Vamos a examinar primero la lenta y dolorosa.