Node:Qué ocurre cuando elimina un fichero, Next:, Previous:Formato RCS, Up:Administracion del Repositorio



Qué ocurre cuando elimina un fichero

Cuando elimina un fichero de un proyecto, no desaparece simplemente. CVS debe ser capaz de recuperar esos ficheros cuando solicite una revisión antigua del proyecto. En lugar de ello, el fichero se pone en el Attic, ático literalmente:

floss$ pwd
/home/jluis/src/miproyecto
floss$ ls /usr/local/nuevorepos/miproyecto/
README.txt,v  a-subdir/     b-subdir/     foo.jpg,v   hello.c,v
floss$ rm foo.jpg
floss$ cvs rm foo.jpg
cvs remove: scheduling 'foo.jpg' for removal
cvs remove: use 'cvs commit' to remove this file permanently
floss$ cvs ci -m "Eliminado foo.jpg" foo.jpg
Removing foo.jpg;
/usr/local/nuevorepos/miproyecto/foo.jpg,v  <--  foo.jpg
new revision: delete; previous revision: 1.1
done
floss$ cd /usr/local/nuevorepos/miproyecto/
floss$ ls
Attic/      README.txt,v  a-subdir/     b-subdir/   hello.c,v
floss$ cd Attic
floss$ ls
foo.jpg,v
floss$

En cada directorio del repositorio de un proyecto, la presencia de un subdirectorio Attic/ indica que se ha borrado al menos un fichero de ese directorio (esto quiere decir que no debería usar directorios llamados Attic en sus proyectos). Sin embargo, CVS no mueve simplemente el fichero RCS a Attic/; además envía el cambio con una nueva revisión al fichero, con un estado especial de revisión de dead, muerto. Aquí está la sección de interés de Attic/foo.jpg,v:

1.2
date   99.06.21.03.38.07;   author jluis;   state dead;
branches;
next	1.1;

Si el fichero se vuelve a traer de nuevo a la vida, CVS tiene una forma de registrar que estaba muerto en algún punto del pasado y que ahora está vivo otra vez.

Esto quiere decir que si quiere restaurar un fichero eliminado, no puede sacarlo del Attic/ simplemente y ponerlo de nuevo en el proyecto. En lugar de ello, tiene que hacer algo como lo siguiente con una copia de trabajo:

floss$ pwd
/home/jluis/src/miproyecto
floss$ cvs -Q update -p -r 1.1 foo.jpg > foo.jpg
floss$ ls
CVS/       README.txt   a-subdir/   b-subdir/   foo.jpg     hello.c
floss$ cvs add -kb foo.jpg
cvs add: re-adding file foo.jpg (in place of dead revision 1.2)
cvs add: use 'cvs commit' to add this file permanently
floss$ cvs ci -m "revivida imagen jpg" foo.jpg
Checking in foo.jpg;
/usr/local/nuevorepos/miproyecto/foo.jpg,v  <-- foo.jpg
new revision: 1.3; previous revision: 1.2
done
floss$ cd /usr/local/nuevorepos/miproyecto/
floss$ ls
Attic/	      a-subdir/     foo.jpg,v
README.txt,v  b-subdir/     hello.c,v
floss$ ls Attic/
floss$

Queda mucho más por saber del formato RCS, pero esto es suficiente para que un administrador de CVS mantenga un repositorio. Es bastante raro que realmente haya que editar un fichero RCS; normalmente sólo tendrá que ajustar permisos de ficheros en el repositorio, al menos si mi propia experiencia sirve de guía. Sin embargo, cundo CVS empieze a comportarse de forma realmente extraña (raro, pero no completamente fuera de lo posible), puede que quiera mirar dentro de los ficheros RCS para averiguar qué está pasando.