Subversion

RECU-0325 (Recurso Ficha Técnica)

Descripción

Como información previa para entender que es Subversion, explicamos el concepto de control de versiones como la gestión de versiones o revisiones de todos los elementos de configuración que forman la línea base de un producto. Gracias a estos sistemas de control de versiones se nos facilitará la administración de las distintas versiones de cada producto.

Un control de versiones es especialmente útil en la industria informática para controlar las distintas versiones del código fuente desarrollado. El trabajo con un sistema de control de versiones puede realizarse de forma manual aunque es muy recomendable disponer de herramientas que faciliten su gestión.

El sistema consiste en una copia en un repositorio central y un programa cliente con el que cada usuario sincroniza su copia local, de tal forma que se comparten los cambios realizados sobre dicha copia.

Subversion es un sistema de control de versiones que administra el acceso a un conjunto de ficheros, y mantiene un historial de cambios realizados. Es software libre bajo una licencia de tipo Apache/BSD y se lo conoce también como svn por ser ese el nombre de la herramienta de línea de comandos.

Modo de empleo

A continuación procedemos a dar unos consejos básicos tanto para la instalación, configuración del servidor de Subversion, como de los comandos para un uso de Subversion a nivel de usuario desde consola.

Instalación

Para realizar la instalación es necesaria la compilación del código fuente de la versión a instalar, en nuestro caso la 1.7.7. Para realizar la instalación en entornos Linux procedemos como sigue:

  1. Creamos el directorio temporal para descomprimir el fichero que contiene la distribución de Subversion: /opt/cice/temp
  2. Copiamos el fichero a la ruta creada anteriormente, procedemos a descomprimirlo y desempaquetarlo:

    # tar -zxvf /opt/cice/temp/subversion-1.7.7.tar.gz

    Una vez realizado, tendremos la carpeta /opt/cice/temp/subversion-1.7.7 con los archivos de configuración y scripts necesarios.

  3. Ejecutamos el script de configuración desde el directorio creado anteriormente:

    #./Configure
  4. En el mismo directorio procedemos a realizar la compilación de subversion

    # make
  5. Cuando finalice procedemos a realizar la instalación:

    # make install

Una vez realizada la instalación, procedemos a definir el procedimiento de arranque y parada manual del sistema. Para arrancar el sistema ejecutamos desde cualquier directorio el comando:

# svnserve -d

Para detener el servicio vemos el PID correspondiente al servidor subversion levantado:

# ps -ef | grep svnserve | grep -v grep | awk '{ print $2 }'

Con el PID devuelto, ejecutamos un

# kill -9 PID

El demonio que se debe ejecutar para monitorizar el correcto acceso al servidor de subversion es el siguiente:

# svnserve -d

Comandos básicos

A continuación procedemos a mostrar algunos comandos útiles para trabajar con subversion, aquí indicamos lo básico para poder trabajar con el control de versiones, pero es recomendable la instalación de algún cliente con interfaz gráfica.

# 1. Checkout
svn checkout http://svn.example.com/repos/proyecto/trunk

# 2. Actualizar cambios hechos por otros
svn update

# 3. ¿Que cambios voy a enviar?
svn status
# 4. Enviar mis cambios
"comentario sobre los cambios subidos"
svn commit –m

# 5. Poner ficheros y directorios bajo el control de subversion
svn add fichero1 fichero2 subdirectorio
"Añado dos ficheros y un directorio"
svn commit –m

# 6. borrar ficheros y directorios
svn delete fichero1 fichero2 subdirectorio
svn commit –m "Borro dos ficheros y un directorio"

Recomendaciones de uso

Metodología de trabajo

  • Se recomienda hacer un update para actualizar nuestra copia local con el nuevo contenido del repositorio al comenzar un sesión.

    svn update
  • Es conveniente antes de cerrar la sesión hacer commit de nuestros cambios en local, resolviendo previamante los conflictos que encontremos.

    svn commit –m "comentario sobre los cambios subidos"

Estructura del proyecto en Trunk, Branches y Tags

Subversion no tiene un concepto interno de ramas ni de etiquetas. Las ramas y las etiquetas en Subversion se almacenan en un directorio del repositorio, no en una dimensión extra como en CVS.

En base a esto, Subversion recomienda la organización del código del proyecto en tres directorios:

  • Directorio Trunk: donde se encuentra la línea principal y actual del desarrollo.
  • Directorio Branches: donde se almacenan otras líneas de desarrollo si son necesarias. También pueden guardarse las modificaciones correspondientes a mantenimientos correctivos o evolutivos de alguna release.
  • Directorio Tags: donde se guardarán las releases finales del producto que se han ido entregando.

Buenas prácticas

Lista de chequeo

En este punto podemos identificar como una lista de chequeo aplicable a cualquier repositorio Subversion lo que sigue:

  • ¿Cada proyecto situado en el repositorio contiene la rama trunk?
  • ¿Cada proyecto situado en el repositorio contiene la rama branches?
  • ¿Cada proyecto situado en el repositorio contiene la rama tags?
  • ¿Cada una de las versiones situadas en el repositorio contiene un fichero CHANGELOG.txt con la descripción de las nuevas funcionalidades con respecto a la versión anterior?

Herramientas para el chequeo

No hemos identificado herramientas de chequeo para el control de versiones Subversion.

Ventajas e inconvenientes

Subversion ha igualado o superado el conjunto de características de CVS, que es un sistema de control de versiones relativamente básico.

A continuación se mencionan alguna de las características de Subversion:

  • Incorpora la mayoría de las funcionalidades de CVS
  • Los directorios están versionados
  • Copiado, borrado y renombrado están versionados.
  • Commit atómico
  • Creación de ramas y tags es menos costosa
  • Incorpora un registro de fusiones (merges)
  • Bloqueo de ficheros.
  • Traduce los mensajes dependiendo de la región, mediante la función gettext()
  • Vinculados a lenguajes de programación como Pyton, Perl, Java y Ruby
  • Resolución interactiva de conflictos.

Algunas carencias que aún podemos encontrar en Subversion son:

  • El manejo de cambio de nombres de archivos no es completo. Lo maneja como la suma de una operación de copia y una de borrado.
  • No resuelve el problema de aplicar repetidamente parches entre ramas,
  • No facilita controlar el número de cambios que se han realizado. Esto se resuelve siendo cuidadoso con los mensajes de commit.

Requisitos e incompatibilidades

Prerrequisitos

Procedemos a describir algunos prerrequisitos detectados para la instalación en nuestro sistema de subversion:

  • Para instalarlo a partir de los fuentes necesitaremos también un compilador gcc y una herramienta como make.
  • Para instalar subversión existen paquetes para precompilados para diversas plataformas, además Subversion puede instalarse partiendo del código fuente en cualquier plataforma que disponga del compilador adecuado. A parte el Apache Portable Runtime (APR) instalado debe ser el 1.0 o superior, se puede descargar la última versión estable disponible 1.4.6 desde la url: http://apr.apache.org/download.cgi.
  • Para la instalación del Subversion en nuestro sistema hemos de seguir unos pasos previos que nos aseguren que no hay ninguna versión previa instalada y que disponemos de todos los paquetes necesarios para la instalación. Para ello procedemos como sigue:

Comprobamos si está disponible el puerto de escucha del servidor de Subversion:

# netstat -an | grep 3109

Si devuelve algún resultado, significa que hay otra aplicación corriendo en dicho puerto, probablemente otro subversion. Para identificar la versión procedemos como sigue:

# svn --version

Si la versión es inferior a la 1.4.5 deberemos detener el demonio del Subversion de la siguiente forma, obteniendo el PID del proceso:

# ps -ef | grep svnserve | grep -v grep | awk '{ print $2 }'

A continuación con el número de 4 cifras que nos devolvió matamos el proceso:

# kill -9 PID

Tras detener el demonio, verificamos que tenemos los paquetes necesarios en nuestro sistema para poder instalar Subversion.

# rpm -q apr
# rpm -q apr-utils
# rpm -q db

Cada uno de estos comandos nos devolverá la versión del paquete que tenemos instalado o un mensaje indicando que no se encuentra instalado en el sistema, si ocurre esto último procedemos a instalar el paquete desde el menu para instalar del sistema.

  • El control por directorios, no es directo con los grupos de LDAP, aún. Sólo pueden ser los grupos virtuales que estén definidos en la entrada AuthzSVNAccessFile del fichero dav_svn.conf.

Incompatibilidades

Incompatibilidades no se han detectado.

Interacciones

Integración

Una integración básica de Subversion puede ser con el servidor web Apache gracias al cual podemos dejar de lado el uso del servidor más rápido y pequeño svnserve, más apropiado para entornos de trabajo en los que no se requiera de las funcionalidades avanzadas que ofrece Apache. Apache es el servidor web más popular en la actualidad. Para integrarlo con Subversion, es necesario utilizar un módulo, mod_dav_svn, gracias al cual Apache puede acceder a un repositorio y hacerlo disponible vía protocolo WebDAV/DeltaV, que es una extensión de HTTP.

Otra integración posible de Subversion puede ser con un plugin de Maven denominado SCM: gracias a este plugin, maven permite disponer de información sobre la localización del código fuente del aplicativo en Subversion. La configuración de este plugin en Maven se consigue agregando al pom.xml el siguiente código:

<scm>
<connection>scm:svn:https://user:pass@url_repositorio_svn</connection>
</scm>

Aplicaciones cliente

Existen varias interfaces a Subversion, como programas individuales con interfaces que lo integran para entornos de desarrollo, procedemos a identificar y definir algunos de los más importantes:

  • TortoiseSVN: Provee integración con el explorador de Windows. Es la interfaz más popular en este sistema operativo.
  • Subclipse: Plugin de Eclipse para acceso a repositorios Subversion, con este plugin conseguimos integrar las funcionalidades de Subversion en eclipse.
  • Subversive: Plugin alternativo para Eclipse.
  • ViewVC: Interfaz web, que también permite trabajar con CVS.

Para MAC, pueden emplearse los interfaces SvnX, RapidSVN y Zigversion.

  • Kdesvn: Provee integración con el escritorio KDE, muy parecido en apariencia, funcionamiento y características a TortoiseSVN.

Versiones

La última versión recomendada es la 1.7.5. Es considerada como la más actualizada debido a que corrige varios errores de versiones precedentes. Esta versión es la recomendada actualmente por ser la última y más estable de las distribuidas.