Sesión con CVS

De ChuWiki

¿Qué es CVS?[editar]

CVS es un sistema de control de versiones. Cuando estamos programando, vamos generando varias versiones de nuestros ficheros fuente, según vamos añadiendo mejoras, corrigiendo errores, etc. CVS nos permite guardar todas estas versiones de una forma cómoda, facilitándonos comparar los fuentes de una versión con otra, volver a una versión anterior, etc.

Con CVS, cada vez que modificamos un fichero, se guarda el nombre de la persona que lo ha modificado, la fecha/hora y un comentario sobre la modificación. Podemos ver sobre un fichero concreto el historial de cambios a lo largo de todo el proyecto.


¿Qué necesitamos para usar CVS[editar]

CVS requiere dos programas.

Por un lado un servidor instalado en un ordenador. Este servidor es el que guardará todas las versiones de todos nuestros ficheros. Es al que le mandaremos nuestros ficheros cuando los tengamos listos y el que nos devolverá dichos ficheros cuando se los pidamos.

Por otro lado, en nuestro ordenador de trabajo necesitamos un cliente de CVS. Este es un programa capaz de conectarse con el servidor y pedirle o enviarle ficheros fuentes, según nosotros lo vayamos necesitando. Para windows hay un programa cvs.exe que se ejecuta desde la línea de comandos de ms-dos. Será ese el que usemos, ya que nos permitirá aprender los comandos típicos de CVS.


Sesión típica con CVS[editar]

Suponemos instalado un servidor de CVS en algún ordenador. Vamos a ver las cosas que podemos hacer en el orden en que habitualmente se hacen.


cvs import ---> Creación de un proyecto[editar]

Alguien, en su ordenador crea toda la estructura de directorios para un proyecto. Pone directorios para los fuentes, ficheros de configuración, scripts de compilado, imágenes, algo de código fuente, etc, etc.

Para guardar esa primera versión del proyecto primero debemos declarar la variable de entorno CVSROOT de la siguiente forma

C:\> set CVSROOT=:pserver:usuario@servidor:directorio

donde:

  • usuario es el nombre del usuario que va crear el proyecto. El nombre de usuario debe ser conocido por el servidor de CVS.
  • servidor es el nombre del ordenador en el que corre el servidor de CVS
  • directorio es el directorio en el ordenador del servidor donde se almacenan nuestros fuentes.

Por supuesto, estas tres cosas deben ser conocidas y estar configuradas en el servidor de CVS.

Una vez definida la variable, hay que entrar en sesión

C:\> cvs login
password:

El comando cvs login sólo es necesario ejecutarlo una vez en la vida. La sesión permanecerá abierta incluso aunque apaguemos el ordenador. La única forma de salir de la sesión es ejecutando cvs logout

Ejecutando cvs login nos pedirá la password para el usuario. Debe ser por supuesto la que tengamos para el servidor de CVS.

Ahora nos vamos al directorio donde esté nuestro proyecto y ejecutamos el comando

C:\> cvs import PROYECTO etiqueta1 etiqueta2

donde:

  • PROYECTO es el nombre que queramos dar a nuestro proyecto. No puede haber en CVS dos proyectos con el mismo nombre.
  • etiqueta1 es una etiqueta cualquiera. Habitualmente se suele poner el nombre de la empresa.
  • etiqueta2 es otra etiqueta cualquiera. Suele ponerse algo relativo a la versión.

Este comando llevará a CVS todos los directorios y ficheros en el directorio actual y subdirectorios recursivamente.

cvs checkout ---> Extraer un proyecto de CVS[editar]

Si ahora otro programador quiere tener en su ordenador el proyecto, debe realizar los siguientes pasos:

Declarar la variable CVSROOT como se indicó anteriormente.

Entrar en sesión con cvs login

Situarse en el directorio donde quiera que se cree el proyecto y ejecutar

C:\> cvs checkout PROYECTO

Donde PROYECTO es el nombre que se la haya dado al proyecto en CVS.

Esto creará un directorio PROYECTO y debajo de el sacará recursivamente todos los subdirectorios y ficheros del proyecto.

En cada directorio del proyecto se crea adicionalmente un subdirectorio CVS para uso de CVS. Dentro de ese directorio se guarda información, como el valor de la variable CVSROOT. Por ello, si estamos por los directorios de un proyecto extraido de CVS, el valor de la variable CVSROOT se ignora. Sólo es necesario definir CVSROOT a la hora de crear un proyecto nuevo en CVS o extraerlo por primera vez.

Es posible que los subdirectorios vacios (sin ficheros dentro), el comando no los saque. Por ello suele ser habitual al crear el proyecto, poner en todos los directorios un fichero que no sirve para nada de nombre .dummy. Esto asegura que ese directorio salga de CVS.

cvs add ---> Añadir directorios a un proyecto[editar]

Para añadir más directorios a un proyecto CVS, primero los creamos en nuestro ordenador, en el directorio adecuado. Luego ejecutamos el comando cvs add

C:\> mkdir UnDirectorio
C:\> cvs add UnDirectorio

cvs add + cvs commit ---> Añadir ficheros a un proyecto[editar]

Para añadir un fichero de texto nuevo a CVS, primero creamos el fichero en nuestro ordenador, en el directorio del proyecto adecuado, luego ejecutamos dos comandos, cvs add y cvs commit

C:\> notepad fichero.java
C:\> cvs add fichero.java
C:\> cvs commit -m"Un Comentario" fichero.java

Esto llevará el fichero al repositorio de CVS con el comentario que pongamos.

Si no ponemos la opción -m con el comentario, se abrirá el editor por defecto (notepad o vi) para que introduzcamos el comentario. Cuando salvemos y salgamos del editor, se ejecutará el comando.

CVS es bastante listo y tiene en cuenta si el fichero lo hemos metido en windows o linux y si lo intentamos sacar desde windows o linux. Al hacer estas operaciones, cambia los retornos de carro adecuados para el sistema operativo. Es decir, cambia los /n por /r/n o al revés, según sea necesario.

Si el fichero es binario, no nos gustaría que hiciera esta operación. Para ello hay que meterlos en cvs indicando que son binarios. De todas formas, CVS es listo y conoce muchas de las extensiones habituales, por lo que lo suele hacer automáticamente.

C:\> cvs add -kb imagen.jpg
C:\> cvs commit -m"Un comentario" imagen.jpg

cvs commit ---> Modificar un fichero de un proyecto[editar]

Para modificar un fichero de un proyecto, simplemente lo modificamos con nuestro editor favorito, lo salvamos y ejecutamos el comando cvs commit

C:\> gvim fichero.java
C:\> cvs commit -m"Un comentario" fichero.java

cvs update ---> Obtener la última versión de CVS[editar]

Si un compañero ha modificado ficheros y los ha llevado al servidor con el comando cvs commit, podemos traerlos a nuestro ordenador ejecutando cvs update

C:\> cvs update -Ad

El comando cvs update trae la versión más moderna de los ficheros del directorio actual a todos los ficheros y subdirectorios por debajo, de forma recursiva.

La opción -A hace que se extraiga la versión más moderna, independientemente de que en otro momento hayamos indicado que queremos tener una versión concreta.

La opción -d hace que se extraigan todos los subdirectorios nuevos que se hayan metido en CVS y que no tengamos en nuesro ordenador.

cvs log + cvs diff + cvs status ---> Obtener información de CVS[editar]

Si queremos ver la historia de un fichero, basta ejecutar el comando cvs log

C:\> cvs log fichero.java

Esto nos dará todas las versiones que hay y el comentario en cada una de ellas, así como la fecha en que se hizo, quién lo hizo, etc.

Para obtener una versión anterior, hacemos cvs update

C:\> cvs update -r1.1 fichero.java

Donde 1.1 es la versión que deseemos y que exista en CVS.

Este comando es "peligroso". CVS recuerda que versión queremos y si hacemos otros cvs update no nos sacará la versión más moderna. Para conseguir la versión más moderna está la opción -A que comentamos antes.

Podemos obtener las diferencias de un fichero entre nuestra versión y otra que esté en CVS.

C:\> cvs diff -r1.1 fichero.java

Este comando nos da un listado de diferencias entre el fichero.java que tenemos en nuestro directorio y la version 1.1 de CVS.

Finalmente, el comando cvs status nos dice cómo estamos respecto a cvs

C:\> cvs status

puede devolver:

  • Locally modified: Hemos modificado el fichero y no lo hemos metido en CVS. Cuando terminemos, debemos hacer cvs commit
  • up-to-date: Nuestra versión y la de CVS son la misma.
  • needs update: Nuestra versión es más antigua que la de cvs. Deberíamos hacer un cvs update
  • needs patch: Nuestra versión es más antigua que la de CVS y además la hemos modifiado. Tendríamos que ver los cambios entre la más moderna que hay en CVS y los que hemos hecho nosotros sobre una más antigua para ver si son compatibles y resolver los posibles conflictos.


Enlaces[editar]