Configurar Subversion para controlar las versiones del código

Para los que nos dedicamos al desarrollo de software es de vital importancia poder hacer un seguimiento de todos los cambios que realizamos en una aplicación, sobre todo cuando se trata de trabajar en equipo con distintos programadores realizando distintas tareas, e incluso llevar un control de los cambios que realizan distintos equipos dentro de un mismo software.

Cuando el proyecto está bajo el paraguas del software libre, herramientas como las proporcionadas por www.sourceforge.net son de mucha ayuda. Entre ellas se encuentra el uso de Subversion o CSV para la gestión de versiones. Personalmente prefiero subversion.

Este es un pequeño HOWTO de como configurar subversion corriendo bajo Apache, se presupone que se tiene instalado Apache, Subversion, el módulo DAV para Apache y las herramientas de administración de Subversion.

Lo primero que debemos hacer es crear un directorio para nuestro repositorio. Nuestro directorio principal para guardar nuestro control de versiones sobre subversion será /var/subversion/, dentro crearemos un subdirectorio donde se almacenarán los datos con subversion:

# mkdir /var/subversion/repositorio

Ahora debemos crear la estructura de subversion para almacenar las versiones y asignarle permisos para poder acceder:

# svnadmin create /var/subversion/repositorio/
# chmod 777 -R /var/subversion/repositorio/

Con esto ya tenemos listo el repositorio, ahora debemos generar el acceso a través de URL, para ello usaremos el módulo de Apache WebDav. Editaremos el fichero de módulo DAV de Apache (en Devian lo encontraremos en /etc/apache2/mods-available/dav_svn.conf), al final del fichero incluiremos las siguientes líneas:

# Acceso repositorio SVN

DAV svn
AuthType Basic
AuthName «Servidor Subversion»
SVNPATH /var/subversion/repositorio

En «Location» debemos poner la URL por la que queremos acceder al repositorio y en SVNPATH debemos colocar la ruta absoluta hacia el directorio que contendrá los ficheros de nuestro repositorio. Con esto ya debería estar funcionando nuestro repositorio con Subversion, basta con enlazarlo desde cualquier IDE que soporte control de versiones y comenzar a guardar las versiones de vuestros proyectos.

Como subversion no es sólo lo que he comentado, existe un estupendo manual donde podéis encontrar todas las funciones que ofrece este gestor de versiones.

Control de versiones

Todo aquel que se haya tenido que enfrentar a un desarrollo en el que participan varios programadores se habrá encontrado con el mismo problema: ¿quién tiene la versión buena?

Y esto deriva en varios problemas más: ¿dónde aplico el cambio? ¿hás modificado tal fichero? ¿has terminado esa parte? y, sobre todo, que ocurre cuando alguien comete un error y tardamos días en darnos cuenta, ¿cómo volvemos atrás?

La solución en estos casos es un contol de versiones, basicamente lo que permite es tener una copia actualizada del trabajo sobre un servidor (repositorio) y una copia guardada de cada cambio subido al repositorio (versiones). Cada vez que alguien quiera continuar el trabajo debe bajarse una copia del repositorio actualizada, trabajar sobre ella y luego subir los cambios al servidor, creando una nueva versión.

Aunque son bastante evidentes, estas son algunas de las ventajas de trabajar con un control de versiones:

  • Tener un control exacto sobre cual es la última versión del código, y quién y cuando la ha cargado.
  • Poder comparar versiones, viendo cuales han sido los cambios realizados.
  • Regresar atrás (a una vesión anterior) cuando lo que hemos desarrollado no nos ha dado los resultados esperados.
  • Crear distintas ramas del proyecto. Si llegado a un punto se hace necesario hacer dos aplicaciones con distintas funcionalidades, pero con cosas en común, se pueden separar en dos ramas.

Obviamente hay más ventajas del control de versiones, pero creo que sólo por las cuatro anteriores merece la pena usar cualquier sistema gestor de control de versiones.

Entre los sistemas de control de versiones destacaría los tres siguientes:

  • CSV (Concurrent Version System): Desarrollado por GNU se distribuye bajo licencia GPL. Fue muy popular hasta la aparición de Subversion.
  • SVN (Subversion): Hoy es el más popular, fue creado para mejorar CVS, mejorando sobre todo el manejo de archivos binarios.
  • Git: Diseñado por Linus Torvalds, es usado por el desarrollo del kernel de Linux, aunque no alcanza la popularidad de los otros dos.
  • Mercurial: Un gestor de vesiones para entornos distribuidos sin necesidad de usar un servidor.
  • Monotone: Al igual que Mercurial no usa servidor, cada cliente hace al mismo tiempo de cliente y servidor.

Más información: Wikipedia [Control de Versiones]