Node:Obtener una copia de trabajo, Next:, Previous:Comenzar un nuevo Proyecto, Up:Un día con CVS



Obtener una copia de trabajo

El comando para obtener un proyecto es exactamente el que cree que es:

floss$ cvs checkout miproyecto
cvs checkout: Updating miproyecto
U miproyecto/README.txt
U miproyecto/hello.c
cvs checkout: Updating miproyecto/a-subdir
U miproyecto/a-subdir/loquesea.c
cvs checkout: Updating miproyecto/a-subdir/subsubdir
U miproyecto/a-subdir/subsubdir/fish.c
cvs checkout: Updating miproyecto/b-subdir
U miproyecto/b-subdir/random.c

floss$ ls
miproyecto/      era_miproyecto/
floss$ cd miproyecto
floss$ ls
CVS/        README.txt  a-subdir/   b-subdir/   hello.c
floss$

Guau... ¡su primera copia de trabajo! Su contenido es exactamente el mismo que el que ha importado, con el añadido de un subdirectorio llamado "CVS". Ahí es donde CVS guarda la información de control de versiones. De hecho, cada directorio presente en el proyecto tiene un subdirectorio CVS:

floss$ ls a-subdir
CVS/        subsubdir/  loquesea.c
floss$ ls a-subdir/subsubdir/
CVS/    fish.c
floss$ ls b-subdir
CVS/      random.c

El hecho de que CVS guarde la información de revisiones en subdirectorios llamados CVS conlleva que su proyecto no puede tener nunca subdirectorios propios llamados CVS. En la práctica, nunca he oído que esto supusiese un problema.

Antes de editar ningún fichero, echemos una ojeada a la caja negra:

floss$ cd CVS
floss$ ls
Entries     Repository  Root
floss$ cat Root
/usr/local/cvs
floss$ cat Repository
miproyecto
floss$

Nada misterioso por aquí. El fichero Root apunta al repositorio, y el fichero Repository apunta a un proyecto dentro del repositorio. Si esto le parece un poco confuso, permítame que se lo explique.

Hay una confusión muy extendida sobre la terminología empleada en CVS, y es que la palabra "repositorio" se utiliza para hacer referencia a dos cosas distintas. A veces, se utiliza para aludir al directorio raíz del repositorio (por ejemplo, /usr/local/cvs), que puede contener muchos proyectos; esto es a lo que se refiere el fichero Root. Pero, otras veces, se refiere a un subdirectorio particular específico de un proyecto dentro de la raíz de un repositorio (por ejemplo /usr/local/cvs/miproyecto, /usr/local/cvs/tuproyecto, o /usr/local/cvs/fish). El fichero "Repository" dentro de un subdirectorio CVS toma el segundo significado.

En este libro, "repositorio" generalmente significa "raíz", es decir, el repositorio situado en el nivel más alto, si bien, ocasionalmente, se usará para hacer referencia a un subdirectorio específico de un proyecto. Si el sentido que se le intenta dar no queda claro dentro del contexto, habrá texto que lo clarifique. Tenga en cuenta que el fichero "Repository" puede a veces contener la senda absoluta al nombre del proyecto en lugar de una senda relativa. Esto hace un tanto redundante al fichero Root:

floss$ cd CVS
floss$ cat Root
:pserver:jluis@cvs.foobar.com:/usr/local/cvs
floss$ cat Repository
/usr/local/cvs/miproyecto
floss$

El fichero "Entries" contiene información sobre cada uno de los ficheros que forman parte del proyecto. Cada línea se corresponde con un fichero, y sólo hay líneas para ficheros o subdirectorios en el directorio padre inmediato. Éste es el fichero CVS/Entries del directorio raíz de miproyecto:

floss$ cat Entries
/README.txt/1.1.1.1/Sun Apr 18 18:18:22 1999//
/hello.c/1.1.1.1/Sun Apr 18 18:18:22 1999//
D/a-subdir////
D/b-subdir////

El formato de cada línea es

/nombre de fichero/número de revisión/fecha de última modificación//

y las líneas de directorios vienen precedidas de la letra "D". En realidad, CVS no guarda un historial de los cambios realizados en los directorios, así que los campos de número de revisión y fecha están vacíos.

Las marcas de fecha guardan la fecha y hora de la última actualización (en horario universal, no local) de los ficheros presentes en la copia de trabajo. De esta forma, CVS puede saber fácilmente si un fichero ha sido modificado desde la última obtención de copia de trabajo, actualización o envío. Si la fecha registrada por el sistema de ficheros difiere de la fecha anotada en el fichero CVS/Entries, CVS sabe (sin ni siquiera tener que consultar el repositorio) que el fichero ha sido probablemente modificado.

Si examina los ficheros CVS/* en uno de los subdirectorios

floss$ cd a-subdir/CVS
floss$ cat Root
/usr/local/cvs
floss$ cat Repository
miproyecto/a-subdir
floss$ cat Entries
/loquesea.c/1.1.1.1/Sun Apr 18 18:18:22 1999//
D/subsubdir////
floss$

verá que el repositorio raíz no ha cambiado, pero el fichero "Repository" indica la situación de este subdirectorio dentro del proyecto, y el fichero "Entries" contiene líneas distintas.

Inmediatamente después de hacer una importación, el número de revisión de cada fichero en el proyecto se muestra como 1.1.1.1. Este número inicial de revisión es un caso un poco especial, así que no lo veremos en detalle aún; echaremos un vistazo más de cerca a los números de revisión una vez que hayamos hecho algunos cambios.