Node:CVS y argumentos implícitos, Next:, Previous:Ver lo que Ud. (y otros) han hecho - comandos Update y Diff, Up:Un día con CVS



CVS y argumentos implícitos

En cada uno de los comandos de CVS explicados hasta el momento, quizás se haya dado cuenta de que no hemos indicado fichero alguno en la línea de comando. Por ejemplo, hemos utilizado

floss$ cvs diff

en lugar de

floss$ cvs diff hello.c

y

floss$ cvs update

en lugar de

floss$ cvs update hello.c

El principio que dicta esto es que si usted no indica ningún nombre de fichero, CVS actuará sobre todos los ficheros sobre los que el comando resultaría apropiado. Esto incluye también ficheros en subdirectorios situados por debajo del directorio actual; CVS automáticamente desciende desde el directorio actual hasta cada subdirectorio en el árbol. Por ejemplo, si modificó b-subdir/random.c y a-subdir/subsubdir/fish.c, invocar una actualización podría devolver unos resultados como éstos:

floss$ cvs update
cvs update: Updating .
M hello.c
cvs update: Updating a-subdir
cvs update: Updating a-subdir/subsubdir
M a-subdir/subsubdir/fish.c
cvs update: Updating b-subdir
M b-subdir/random.c
floss$

o mejor aún:

floss$ cvs -q update
M hello.c
M a-subdir/subsubdir/fish.c
M b-subdir/random.c
floss$

Nota: La opción -q es una versión "ligera" de -Q. Si se hubiera usado -Q, el comando no habría mostrado nada en absoluto, porque las notas de modificación son consideradas mensajes de información no esenciales. La versión en minúsculas, -q, es menos estricta: suprime los mensajes que posiblemente no queramos, a la vez que permite que otros mensajes, posiblemente más útiles, sí lleguen hasta nosotros.

También puede nombrar ficheros específicos que desee actualizar:

floss$ cvs update hello.c b-subdir/random.c
M hello.c
M b-subdir/random.c
floss$

y CVS sólo examinará estos ficheros, ignorando cualquier otro.

Lo cierto es que es más habitual no limitar la actualización a determinados ficheros, puesto que en la mayoría de los casos querrá actualizar el árbol de directorios al completo de una sola vez. En todo caso, recuerde que las actualizaciones que hacemos aquí a modo de ejemplo sólo muestran que algunos ficheros se han modificado de forma local, porque aún no se ha cambiado nada en el repositorio. Cuando otras personas están trabajando en el mismo proyecto que usted, siempre existe la posibilidad de que la actualización incorpore algunos cambios nuevos del repositorio en sus ficheros locales, en cuyo caso sí puede resultarle útil indicar los ficheros en concreto que desea actualizar.

El mismo principio puede aplicarse a otros comandos de CVS. Por ejemplo, con diff, puede ver los cambios habidos en un fichero cada vez:

floss$ cvs diff -c b-subdir/random.c
Index: b-subdir/random.c
===================================================================
RCS file: /usr/local/cvs/miproyecto/b-subdir/random.c,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 random.c
*** b-subdir/random.c   1999/04/18 18:18:22     1.1.1.1
--- b-subdir/random.c   1999/04/19 06:09:48
***************
*** 1 ****
! /* Un fichero en C completamente vacío. */
--- 1,8 --
! /* Imprimir un número aleatorio. */
!
! #include <stdio.h>
!
! void main ()
! {
!   printf ("un número aleatorio\n");
! }

o ver todos los cambios de una sola vez (agárrese al asiento, esto va a ser un diff bastante grande):

floss$ cvs -Q diff -c
Index: hello.c
===================================================================
RCS file: /usr/local/cvs/miproyecto/hello.c,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 hello.c
*** hello.c     1999/04/18 18:18:22     1.1.1.1
--- hello.c     1999/04/19 02:17:07
***************
*** 4,7 ****
--- 4,8 --
  main ()
  {
    printf ("¡Hola, mundo!\n");
+   printf ("¡Adiós, mundo!\n");
  }
Index: a-subdir/subsubdir/fish.c
===================================================================
RCS file: /usr/local/cvs/miproyecto/a-subdir/subsubdir/fish.c,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 fish.c
*** a-subdir/subsubdir/fish.c   1999/04/18 18:18:22     1.1.1.1
--- a-subdir/subsubdir/fish.c   1999/04/19 06:08:50
***************
*** 1 ****
! /* Un fichero en C completamente vacío. */
--- 1,8 --
! #include <stdio.h>
!
! void main ()
! {
!   while (1) {
!     printf ("fish\n");
!   }
! }
Index: b-subdir/random.c
===================================================================
RCS file: /usr/local/cvs/miproyecto/b-subdir/random.c,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 random.c
*** b-subdir/random.c   1999/04/18 18:18:22     1.1.1.1
--- b-subdir/random.c   1999/04/19 06:09:48
***************
*** 1 ****
! /* Un fichero en C completamente vacío. */
--- 1,8 --
! /* Imprimir un número aleatorio. */
!
! #include <stdio.h>
!
! void main ()
! {
!   printf ("un número aleatorio\n");
! }

En cualquier caso, como puede ver en estos diffs, queda claro que el proyecto está listo para debutar. Enviemos los cambios al repositorio.