47.5. Introducción a Subversion

Subversion es un sistema de control de versiones de código abierto y es considerado el sucesor de CVS. Por eso ciertas características de CVS ya presentadas son iguales en Subversion. Es muy indicado para disfrutar de las ventajas de CVS sin ninguno de sus inconvenientes. Muchas de sus prestaciones ya fueron presentadas en la Sección 47.1.3, “Subversion”.

47.5.1. Instalación de un servidor Subversion

Establecer un repositorio en un servidor es relativamente simple. Subversion dispone para ello de una herramienta de administración especial llamada svnadmin. El repositorio nuevo se crea con:

svnadmin create /ruta/al/repositorio

La ayuda muestra opciones adicionales: svnadmin help. A diferencia de CVS, Subversion no está basado en RCS sino que utiliza la base de datos de Berkeley. El repositorio no se puede encontrar sobre sistemas de archivos remotos como NFS, AFS o Windows SMB, porque la base de datos necesita mecanismos de bloqueo del tipo POSIX. Estos mecanismos no existen en los sistemas de archivos mencionados.

El comando svnlook sirve para ver el contenido de un repositorio existente:

svnlook info /ruta/al/repositorio

El servidor debe ser configurado de tal forma que distintos usuarios puedan acceder al repositorio. Utilice el servidor Web Apache o bien el servidor propio de Subversion llamado svnserve. Una vez que svnserve se está ejecutando, las URL svn:// o svn+ssh:// permiten el acceso directo al repositorio. En el archivo /etc/svnserve.conf puede introducir a los usuarios que tienen que autentificarse en el momento de usar el comando svn.

La decisión a favor o en contra de un determinado sistema de control de versiones depende de muchos factores. Para más información consulte la Sección 47.5.3, “Información adicional”.

47.5.2. Manejo de Subversion

El acceso a un repositorio de Subversion se realiza con el comando svn (similar a cvs). Si el servidor está correctamente configurado (con su correspondiente repositorio), se puede mostrar el contenido en cada cliente mediante:

svn list http://svn.example.com/ruta/al/proyecto

o

svn list svn://svn.example.com/ruta/al/proyecto

El comando svn checkout sirve para guardar un proyecto existente en el directorio actual (check out):

svn checkout http://svn.example.com/ruta/al/proyecto NombreProyecto

Realizando el “checkout” se crea en el cliente un subdirectorio nuevo denominado NombreProyecto. Dentro de este puede realizar cualquier modificación (añadir, copiar, renombrar, borrar):

svn add file
svn copy oldfile newfile
svn move oldfile newfile
svn delete file

Se puede aplicar cada uno de estos comandos para archivos y para directorios. Además Subversion es capaz de guardar properties (propiedades) de un archivo o directorio:

svn propset license GPL foo.txt

El comando anterior deja la propiedad license del archivo foo.txt en el valor GPL. Mediante svn proplist se puede ver las propiedades:

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

Los cambios se publican, es decir, se guardan en el servidor con el comando svn commit. Otros usuarios que quieran disponer de los cambios realizados por Ud. en sus propios directorios, tienen que sincronizarse con el servidor mediante svn update.

A diferencia de CVS, es posible mostrar el estado de un directorio de trabajo de Subversion sin acceder al repositorio por medio de svn status. Los cambios locales se muestran en cinco columnas, siendo la primera la más importante:

''

Sin cambios.

'A'

El objeto se añade.

'D'

El objeto se borra.

'M'

El objeto ha sido modificado.

'C'

El objeto está en conflicto.

'I'

El objeto se ignora.

'?'

El objeto no está sometido al control de versiones.

'!'

Objeto desaparecido. Esta marca aparece cuando el objeto ha sido borrado o movido sin el comando svn.

'~'

El objeto se ha administrado como archivo pero ha sido reemplazado por un directorio (o un directorio reemplazado por un archivo).

La segunda columna muestra las propiedades (properties). Para el significado de las demás columnas, consulte el libro de Subversion.

Con svn help puede acceder a la ayuda rápida para obtener una descripción de un parámetro de un comando:

svn help proplist
proplist (plist, pl): List all properties on files, dirs, or revisions.
usage: 1. proplist [PATH...]
       2. proplist --revprop -r REV [URL]

  1. Lists versioned props in working copy.
  2. Lists unversioned remote props on repos revision.
...

47.5.3. Información adicional

El punto de partida es la página web de Subversion en http://subversion.tigris.org. Después de instalar el paquete subversion-doc, un libro muy recomendable (en inglés) se encuentra en el directorio file:///usr/share/doc/packages/subversion/html/book.html. También puede consultarlo en línea en http://svnbook.red-bean.com/svnbook/index.html