5. Más posibilidades con CVS

CVS tiene muchas posibilidades para seguir el recorrido que ha seguido un proyecto ya que mantiene un fichero de registro con todo lo acontecido.

5.1. Marcar con etiquetas

Uno de los inconvenientes de trabajar con CVS es que siempre se manejan los ficheros con sus versiones y mantener una lista de versiones relaciona con todos los archivos puede resultar muy molesto en proyectos no muy grandes. Para evitar esto existe el comando tag etiqueta que nos permite enlazar diferentes versiones con un nombre simbólico.

Una semana después de empezar un proyecto y de desarrollo marco todo el contenido actual como version_2001-12-31:

charlie$ cvs tag version_2001-12-31
cvs tag: Tagging .
T index.sgml
T Makefile
T bibliografia.sgml
cvs tag: Tagging capitulo01
T capitulo01/shell.sgml
[...]
    

A partir de ahora puedo hacer referencia a este estado de versiones como version_2001-12-31, lo que me permitirá en un futuro recuperar todos los archivos tal y cómo estaban en el momento en el que los he etiquetado.

5.2. La historia de un fichero

Según se va desarrollando un proyecto es interesante saber que trayectoria ha seguido un fichero y aquí es donde entra la calidad de los comentarios introducidos por los desarrolladores. Para ello se utiliza el commando log.

En este ejemplo voy a consultar la historia del fichero menu.php:

charlie$ cvs log menu.php 
 
RCS file: /var/cvs/web/menu.php,v
Working file: menu.php
head: 1.12
branch:
locks: strict
access list:
symbolic names:
  Diciembre_2001: 1.1.1.1
  chernando: 1.1.1
keyword substitution: kv
total revisions: 13;    selected revisions: 13
description:
----------------------------
revision 1.12
date: 2001/12/30 15:54:18;  author: chernando;  state: Exp;  lines: +1 -1
De siglinux a quienes y por tanto nuevo siggulfi con enlace
----------------------------
revision 1.11
date: 2001/12/30 12:01:56;  author: chernando;  state: Exp;  lines: +7 -7
Limando detalles 2
----------------------------
revision 1.10
date: 2001/12/30 11:57:15;  author: chernando;  state: Exp;  lines: +7 -5
Limando detalles 1
----------------------------
revision 1.9
date: 2001/12/30 11:40:43;  author: chernando;  state: Exp;  lines: +8 -9
Arreglado un enlace erroneo
[...]
    

5.3. Incluyendo la versión dentro del propio fichero

CVS maneja internamente los ficheros que se suben al repositorio, por ello es necesario controlar a los fichero binarios y algunos formatos de texto ya que es posible que CVS los interprete. En este caso vamos a ver cuales son algunas de las expresiones que se expanden automáticamente.

Un ejemplo muy sencillo es añadir $Id$, que será automáticamente por información relacionada a la última modificación, el autor de la misma y la versión. Este ejemplo es del XML de SIGLinux - GULFI:

[email protected]:~/cvs/gulfi-web/servicios$ head cvs.xml 
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE webpage PUBLIC "-//laespiral.org//DTD LE-document 1.1//EN"
   "LE-document-1.1.dtd" [<!ENTITY menu SYSTEM "menu.xml"> ] >

<!-- $Id: cvs.xml,v 1.2 2002/04/03 18:16:11 chernando Exp $ -->
<webpage lang="es" xreflabel="CVS" folder="servicios" id="cvs">
  <title>CVS</title>
  <sect1>
    <title>CVS</title>
    <para>
# ...
    
En este caso, cada vez que sea actualiza el fichero la línea <!-- $Id: cvs.xml,v 1.2 2002/04/03 18:16:11 chernando Exp $ --> también se actualiza.

Existen otros patrones de sustitución como son: $Author$, $Date$, $Header$, $Name$, $Log$,.... Para más información consultar el manual de CVS.

Hay que tener en cuenta la precaución de dejar $Id dentro de un comentario dentro del lenguaje que estemos utilzando.