Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found in GNU Free Documentation License.
CVS se corresponde a las siglas de Concurrent Version System y es un sistema cliente/servidor que permite a un grupo de desarrolladores poder trabajar simultaneamente sobre los mismos trabajos, viene a utilizarse en proyectos de documentación y para la creación de nuevos programas de forma que todos los que tengan acceso a ese módulo del CVS puedan modificarlo para la mejora de dicho programa.
Funciona a través de un repositorio, esto es una especie de almácen donde se van a albergar una serie de módulos de forma que podamos descargarlos, borrarlos, actualizarlos o añadir nuevos ficheros sobre esos módulos, vendría a ser la unidad mínima del CVS y sería la correspondiente a lo que puede ser un programa entero o bien una carpeta donde tengamos la documentación que estemos escribiendo o los programas que estemos actualmente desarrollando.
Para la instalación del CVS, podemos acceder vía ftp a ftp://ftp.cvshome.org/pub/ dónde podemos encontrar la ultima versión del cvs que ha sido desarrollada o bien instalarlo vía paquete deb o rpm, para los debianeros con un apt-get install cvs, nos servirá, para los que decidan instalarlo desde las fuentes sería de la siguiente manera:
# tar xzvf cvs-1.xx.tar.gz # cd cvs-1.xx # ./configure # make # make install
Con esto ya tendremos instalados el CVS en nuestro sistema, de forma que quedaría definir el repositorio al que posteriormente queramos conectarnos, bien sea un repositorio local en caso de hacer servidor CVS o bien de forma remota en caso de querer acceder como cliente a un servidor CVS definido en la variable $CVSROOT.
Algunos conceptos que necesitamos saber son los siguientes:
* Repositorio: Vendría a ser el árbol de directorios o de módulos de nuestro sistema CVS, es decir, dónde vamos a almacenar todos nuestros módulos.
* Módulo: Es un directorio específico del árbol de directorios del CVS.
* RCS: Sistema de control de revisiones viene a ser un conjunto de utilidades en las que está dividido CVS que se va a encargar de la actualización, borrado y modificación de nuestros módulos aparte de otras operaciones como añadir ficheros a nuestros módulos o simplemente generar un diff entre las distintas versiones de nuestros módulos de nuestro repositorio.
* Check out (co): Viene a ser la copia de los ficheros del repositorio a nuestra máquina para las posteriores modificaciones que queramos hacer sobre un específico módulo del repositorio.
* Revision: Se refiere a la versión del módulo con el que estamos trabajando.
Algunos comandos básicos del CVS son los siguientes, no vamos a ver todos, unicamente los más importantes, si quereis investigar más podeis ver con -H la lista de todos los comandos al igual que podeis verlos en el man del cvs.
cvs checkout o cvs co: Sirve para hacer una copia local de un módulo en concreto del repositorio, creando en el directorio actual la carpeta con el suso dicho módulo que hayamos decidido descargar.
cvs update: Sirve para actualizar la copia en local del módulo del repositorio en caso de haber sufrido cualquier tipo de modificación por otra persona en el transcurso de tiempo que ha estado en local.
cvs commit: Sirve para actualizar en el repositorio cualquier cambio que hayamos hecho en local para que el módulo del repositorio quede completamente actualizado con los cambios que hayamos hecho en él.
cvs add y cvs remove 'filename': Sirve para añadir o borrar un fichero de local,es una forma más elegante de hacerlo que a mano y deberíamos de adaptarnos, luego con el commit del fichero ya quedarían actualizados los cambios en caso de haberlo añadido o borrado. En caso de borrar el fichero, lo quita de la lista actual del repositorio pero lo mueve a una lista CVS Attic por si posteriormente otra persona necesita de su uso.
cvs release: Sirve para una vez que hayamos terminado de trabajar con el módulo anteriormente descargado con cvs co, poder eliminar la copia que tengamos en local de un determinado módulo
cvs log 'filename': Sirve para ver todo tipo de mensajes de commits o actualizaciones que se han hecho sobre un determinado fichero.
cvs diff 'filename': Sirve para ver las diferencias entre un fichero de local y el que está albergado dentro del repositorio.
cvs tag: Especifica una determinada marca o tag para un fichero o directorio del repositorio.
cvs rtag: Especifica un tag de revision para un determinado fichero del repositorio
cvs history: Muestra todos los informes sobre el CVS
Antes de crear nuestro sistema CVS, cada uno de los usuarios tienen que haber definido una variable de entorno el cual define dónde está situado el repositorio al que van a acceder el resto de usuarios para bajar los distintos módulos o ficheros, bien definiendo la variable en nuestro .profile o en el .cvsrc siendo la siguiente:
export CVSROOT=/lugar/de/nuestro/repositorio
Como veis, esta sería una forma de hacerlo de manera local, indicando bien que el repositorio está ubicado en un directorio de nuestra máquina, bien porque se encuentre en local o porque en ese directorio esté montado vía NFS un repositorio de forma remota.
Antes de pasar a explicar un ejemplo tanto de local como de forma remota para que quede un poco más claro:
Local: export CVSROOT=/home/raciel Remota: export CVSROOT=:pserver:cvs@foo.bar.com:/home/raciel
Luego una vez definida nuestra variable CVSROOT unicamente queda conectarnos esto se hace con:
# cvs login (Logging in to cvs@foo.bar.com) CVS password: (enter password here)
Ya una vez conectados, ya podemos ponernos a trabajar con cada uno de los módulos, para ello nos dispondremos a bajar el módulo del que queramos disponer con:
# cvs -z5 co modulo1.0 U modulo1.0/COPYING U modulo1.0/Manifest U modulo1.0/Makefile U modulo1.0/modulo.h U modulo1.0/modulo.c U modulo1.0/WHATSNEW.txt [...]
De esta forma lo que estamos haciendo es un checkout del módulo para la descarga y decirle con -z5 el nivel de compresión gzip que queremos que se le de al módulo para aumentar la velocidad. Para cada nuevo fichero que se crea se antepone de U indicando que se está haciendo un update o actualización del módulo en local.
Una vez que tengamos ya nuestro módulo, puede que queramos tener una actualización por si alguien ha hecho un cambio, esto se hace de la siguiente manera:
# cvs update -dP
Esto lo que hace es actualizar los módulos del repositorio en local y le pasamos -d para que nos cree todos los directorios nuevos que se hayan creado en el repositorio y -P lo que hace es borrar todos los directorios de local que se encuentren vacios.
Posteriormente, haremos nuestros cambios sobre el contenido de los módulos en local y en caso de querer actualizar los cambios y tener los permisos oportunos sobre el CVS, con un commit tendremos actualizados los cambios sobre el repositorio del CVS.
# cvs commit
Con el comando -m podemos añadir ciertos comentarios de los cambios que hemos realizado.
# cvs commit -m 'Bug sobre mrproject nº xxx corregido'
Luego, unicamente ver otro comando bastante útil del CVS, el cual es "log" que se encarga de guardar todas las modificaciones que se hayan producido en un determinado fichero.
# cvs log file.c # cvs log | less
Con todo esto ya estamos en condiciones de poder usar el CVS correctamente, quedaría unicamente ver el fichero de configuración .cvsrc donde podemos elegir el tipo de editor por defecto del CVS, los comandos que vayamos a utilizar y un gran etcétera, a continuación, un ejemplo de .cvsrc.
cvs -q diff -u -b -B checkout -P update -d -P