27.5. Introducción a Subversion

Subversion es un sistema de control de versiones de código abierto que se suele considerar sucesor de CVS, lo que significa que las funciones ya introducidas en CVS normalmente también se encuentran en Subversion. Resulta especialmente recomendable si busca las ventajas de CVS pero no quiere sufrir sus inconvenientes. Muchas de estas funciones ya se han presentado brevemente en la Sección 27.1.3, “Subversion”.

27.5.1. Instalación de un servidor de Subversion

La instalación de una base de datos de repositorio en un servidor es un procedimiento relativamente sencillo. Subversion proporciona una herramienta de administración dedicada a este fin. El comando que debe introducir para crear un nuevo repositorio es el siguiente:

svnadmin create /vía/a/repositorio

Utilice svnadmin help para acceder a una lista de opciones adicionales. A diferencia de CVS, Subversion no se basa en RCS, sino en distintos tipos de repositorios. Se suelen utilizar los sistemas Berkeley Database o FSFS (un repositorio que utiliza el sistema de archivos directamente). No instale un repositorio en sistemas de archivos remotos, como NFS, AFS o Windows SMB. La base de datos requiere mecanismos de bloqueo POSIX, que no son compatibles con estos sistemas de archivos.

El comando svnlook proporciona información sobre un repositorio existente.

svnlook info /vía/a/repositorio

Deberá configurar un servidor para permitir el acceso al repositorio a distintos tipos de usuarios. Para ello, utilice el servidor Web Apache con WebDAV, o bien svnserve, el servidor incluido en el paquete de Subversion. Cuando svnserve esté en funcionamiento, se podrá acceder al repositorio mediante una dirección URL con svn:// o svn+ssh://. Los usuarios que deben autenticarse al llamar a svn pueden definirse en /etc/svnserve.conf.

Decidir entre Apache y svnserve depende de muchos factores. Es recomendable consultar el manual de Subversion. Encontrará más información en la Sección 27.5.3, “Información adicional”.

27.5.2. Uso y funcionamiento

Utilice el comando svn (similar a cvs) para acceder a un repositorio de Subversion. Con svn help obtendrá la descripción de un parámetro de comando:


checkout (co): Check out a working copy from a repository.
usage: checkout URL[@REV]... [PATH]

  If specified, REV determines in which revision the URL is first
  looked up.

  If PATH is omitted, the basename of the URL will be used as
  the destination. If multiple URLs are given each will be checked
  out into a sub-directory of PATH, with the name of the sub-directory
  being the basename of the URL.
...

Cualquier cliente puede acceder al contenido proporcionado por un servidor configurado de forma correcta con el repositorio correspondiente, empleando uno de los siguientes comandos:

svn list http://svn.ejemplo.com/vía/a/proyecto

O bien

svn list svn://svn.ejemplo.com/vía/a/proyecto

Utilice el comando svn checkout para guardar un proyecto existente en el directorio actual:

svn checkout http://svn.ejemplo.com/vía/a/proyecto nombredelproyecto

Esta acción crea un nuevo subdirectorio nombredelproyecto en el cliente. A partir de este momento, podrá realizar operaciones en él (adiciones, copias, cambios de nombres y supresiones):

svn add archivo 
svn copy archivoanterior archivonuevo 
svn move archivoanterior archivonuevo 
svn delete archivo

Estos comandos también pueden utilizarse sobre directorios. Subversion también puede guardar las propiedades de un archivo o directorio:

svn propset license GPL foo.txt

El ejemplo anterior establece el valor GPL para la propiedad license (Licencia). Utilice svn proplist para mostrar las propiedades:

svn proplist --verbose foo.txt
 Properties on 'foo.txt':
 license : GPL

Utilice svn commit para guardar los cambios en el servidor. Los demás usuarios podrán incorporar los cambios a sus directorios de trabajo al efectuar la sincronización con el servidor mediante svn update.

A diferencia de CVS, en Subversion se puede ver el estado de un directorio de trabajo sin acceder al repositorio, con el comando svn status. Los cambios locales aparecen en cinco columnas, de las cuales la primera es la más importante:

' '

Sin cambios.

'A'

Objeto marcado para su adición.

'D'

Objeto marcado para su supresión.

'M'

Objeto modificado.

'C'

Objeto en conflicto.

'I'

Objeto omitido.

'?'

Objeto no mantenido por el control de versiones.

'!'

Se ha informado de que el objeto no se encuentra. Este indicador aparece cuando el objeto se suprime o mueve sin utilizar el comando svn.

'~'

El objeto se mantenía como archivo, pero ha sido sustituido por un directorio, o viceversa.

La segunda columna muestra el estado de las propiedades. Puede consultar el significado de las demás columnas en el manual de Subversion.

27.5.3. Información adicional

El primer punto de referencia es la página del proyecto Subversion en la siguiente dirección: http://subversion.tigris.org/. Después de instalar el paquete subversion-doc, encontrará un libro muy recomendable en el directorio file:///usr/share/doc/packages/subversion/html/book.html (también se encuentra disponible en línea en la siguiente dirección: http://svnbook.red-bean.com/svnbook/index.html).