22 febrero 2007

Subversion mola

Tengo que hacer varios trabajillos de clase, así que me creado un repositorio svn (Subversion) para organizar las cosas. Subversion es un programa que se encarga de llevar un historial de las modificaciones que se han realizado en los ficheros de un proyecto. Es capaz de responder a las preguntas: ¿tengo la última versión del proyecto? ¿cómo era este fichero en día 1 de enero de 2005? ¿cuáles son los cambios desde la última versión? Un lujo si tienes ficheros desperdigados por distintos ordenadores, tenerlos controlados con Subversion.

Hoy voy a explicar básicamente el funcionamiento de svn para usar personal (sin tener servidor ni nada, todo en la máquina local). No sirve para controlar proyectos que están en varios sitios pero te puede servir para trabajar más tranquilo, si modificas muchas cosas de un programa pero luego te das cuenta de que no te gusta como queda simplemente has de volver a la versión del día anterior.

Lo primero que hay que hacer es crear un repositorio. Es la base de datos que usa svn para almacenar las versiones de los ficheros y toda su información. NO hay que tocar este directorio manualmente, como se puede ver tiene ficheros de uso interno de Subversion.
$ svnadmin create ~/tmp/repositorio
$ ls ~/tmp/repositorio
conf dav db format hooks locks README.txt
El comando svnadmin create nos crea un repositorio vacío (en la revisión 0).

Ahora debemos crear un directorio para el proyecto. Para ello hay que solicitar la última versión del repositorio.
$ svn checkout file:///home/x/tmp/repositorio proyecto
Revisión obtenida: 0
$ ls -la proyecto/
total 12
drwxr-xr-x 3 x x 4096 2007-02-22 21:38 .
drwxr-xr-x 4 x x 4096 2007-02-22 21:38 ..
drwxr-xr-x 7 x x 4096 2007-02-22 21:38 .svn

Hemos obtenido la última versión del repositorio, que inicialmente está vacío. Ahora podemos empezar a trabajar. Como muestra el comando ls -la, los directorios que están bajo el control de svn tienen un directorio oculto llamado .svn donde se guarda información interna. NO hay que tocar ese directorio, es necesario.

Creamos un proyecto "complejo":
$echo hola > fichero.txt
$ mkdir directorio
$ svn add *
A directorio
A fichero.txt

El comando svn add añade los ficheros indicados al svn para que sean guardados en el repositorio. En algunos casos no tendremos que usar *, por ejemplo si estamos trabajando con programas en C, si ponemos svn add * se guardarán también los ficheros a.out compilados y eso no tiene ninguna utilidad. Sólo hay que hacer svn add sobre un fichero determinada una vez, a partir de ese momento ya estará bajo el control de svn.

Mandamos la última versión al repositorio. Hay que hacer este paso a menudo para que el servidor siempre tenga la última versión.
$ svn ci -m "primera versión"
Añadiendo directorio
Añadiendo fichero.txt
Transmitiendo contenido de archivos .
Commit de la revisión 1.

Para obtener la última versión del proyecto:
$ svn update
En la revisión 1.

Para que este comando funcione hemos de haber hecho svn checkout anteriomente. Este comando lee la información de .svn para saber donde está el repositorio y a qué versión ha de actualizar.

Esta es una miniguía para utilizar svn a nivel usuario, con un repositorio ya creado online o con un repositorio en la máquina local. Subversion tiene muchísimas más cosas mágicas que nos hacen la vida más sencilla, pero esto es lo básico.