Tutorial: Primeros Pasos con Subversion Introducción Subversion es un sistema de control de versiones open source. Corre en distintos sistemas operativos y su principal interfaz con el usuario es a través de la línea de comandos. La herramienta para la línea de comando se llama svn. Existen otras herramientas que se ejecutan en una interfaz gráfica, como es el caso del kdesvn en Linux o el TortoiseSVN en Windows. Subversion maneja archivos y directorios, y lleva un registro de todos los cambios que ha habido en un archivo a lo largo del tiempo. De esta forma, uno puede recuperar una vieja versión de un archivo, revertir algún cambio que no tuvo los resultados deseados o ver un histórico de los cambios del mismo, entre otras acciones más. Además, puede trabajar a través de una red con múltiples usuarios, lo que habilita a cooperar entre distintas personas que trabajan en un proyecto en común y tener un registro de cambios que han hecho otros usuarios sobre un archivo. Por todas estas razones, es que subversion es una herramienta adecuada y ampliamente utilizada en el desarrollo de Software. El Repositorio Como se dijo previamente Subversion es básicamente un sistema de archivos con ciertas características especiales. El núcleo del mismo es lo que se denomina Repositorio, que es el lugar de almacenamiento de los datos. Estos son almacenados en árboles de directorios como los sistemas de archivos que usualmente utilizamos. Distintos clientes puede acceder y leer información del repositorio, como también escribirlo. Cuando es escrito, la nueva información es accesible para el resto de los usuarios. Hasta el momento, hemos descripto simplemente un sistema que permite intercambiar archivos como podría ser un servidor FTP. Lo que diferencia a Subversion y le da su valor agregado, es que el repositorio recuerda cada uno de los cambios escritos en él. Tanto sean cambios en el contenido de un archivo, copias Autor: Martín Belzunce 1
de archivos, reordenamiento de carpetas, etc. El repositorio tiene un número de versión general, el cual se incrementa ante cada cambio realizado en el. Cada uno de los clientes, accede por default a la última versión de un archivo o carpeta. La última versión es denominada HEAD. Pero si lo desea, puede acceder a versiones anteriores de un archivo. Es decir, que en el repositorio están guardadas todas las versiones de los archivos que forman o formaron parte del mismo. Copia Local Cada usuario para acceder a los archivos del repositorio debe generar una copia local de la carpeta o archivos del mismo. El usuario trabajará sobre su copia local modificando archivos, agregando nuevos o eliminando otros. Todos los cambios estarán solo registrados en su copia local. Cuando se desea que dichos cambios se escriban en el repositorio se debe dar la orden de confirmar o commit. En esta operación los cambios que se hicieron en la copia local son guardados en el repositorio y el número de versión del mismo es incrementado. En esta breve guía, daremos los indicios para dar los primeros pasos en el uso de Subversion. No abordaremos ninguna tarea relacionada con la administración de un repositorio SVN, así como tampoco como trabajar cooperativamente entre usuarios, fusionar versiones y otras operaciones avanzadas. A continuación se brindará un ejemplo de un ciclo de trabajo sencillo utilizando Subversion. Primero se lo presentará utilizando la herramienta kdesvn y luego desde la línea de comando con svn. Autor: Martín Belzunce 2
Trabajando con kdesvn Para instalar kdesvn se lo puede hacer desde el gestor de paquetes synaptic o desde la línea de comandos con: apt-get install kdesvn. El primer paso que debemos realizar es descargar una copia local de nuestra carpeta de trabajo en el repositorio. Para esto abrimos la aplicación kdesvn y observaremos una interfaz como la de la Figura 1. Figura 1. Para generar una copia local de la carpeta, ir al menú Subversion->General- >Obtener un Repositorio. Se abrirá una ventana como la de la Figura 2. Figura 2. Autor: Martín Belzunce 3
En el campo url se debe introducir la url del repositorio del curso con el nombre de usuario del alumno. Ejemplo: http://svn.electron.frba.utn.edu.ar/info1/r1043/belzunce. Mientras que el directorio destino hay que introducir el path de una carpeta donde queremos guardar nuestra copia local. En la Figura 2 se puede observar que está seleccionada la opción HEAD, esto indica que se bajará la última versión del repositorio. Nuestra copia local es una carpeta más dentro del sistema de archivos. Si ahora entramos a esta carpeta de trabajo y pedimos una lista completa de los archivos, veremos que estarán los archivos que se encontraban en el repositorio y además una carpeta oculta.svn. En ella se encuentra toda la información respecto de la copia local y su relación con el repositorio (url del mismo, número de versión, etc.). No la debemos modificar ni borrar bajo ningún concepto, porque de lo contrario perderemos la relación de nuestra copia local con el repositorio. En el caso de la Figura 3, en el repositorio nuestra carpeta estaba vacía, por lo que la copia local no contiene archivos. Figura 3. Ahora suponemos, que generamos dos archivos de código tp3_8.c y tp3_8.h en nuestra carpeta local. Esos archivos no están versionados hasta que se lo indiquemos, por lo que se observará en el kdesvn algo similar a la Figura 4. En la Autor: Martín Belzunce 4
misma se puede observar que los archivos figuran con un estado de No versionado. Para agregarlos al versionado y al repositorio, deberemos seleccionarlos y hacer click en el botón de Add. Figura 4. Observaremos que el estado de los archivos cambió a añadidos localmente. Esto significa que se han agregado a nuestra copia local, pero todavía no en el repositorio. Cuando queremos que un cambio de nuestra copia local se haga efectivo en el repositorio debemos ir al botón de Confirmar. (Figura 5) Figura 5. Autor: Martín Belzunce 5
Una vez que hemos confirmado el agregado de los archivos, estos ya estarán disponibles en el repositorio. Si quisiéramos acceder al repositorio desde otra PC, al generar una copia local se descargarán los archivos subidos. Supongamos que la sesión de trabajo se termina en este punto. Otro día, queremos seguir trabajando en dichos archivos para terminar el trabajo. Ahora, ya tenemos una copia local en nuestra PC, por lo que no debemos generarla. Para acceder a la misma con kdesvn debemos ir al menú Archivo->Abrir y seleccionar la carpeta de nuestra copia local. (Figura 6) Figura 6. Se continúa trabajando con los archivos agregados anteriormente. Al modificarlos, en nuestra copia local observaremos que están en el estado Modificado Localmente (Figura 7). Kdesvn ha reconocido que se han modificado los archivos en nuestra copia loca, para trasladar los cambios al repositorio deberemos hacer click en confirmar. Una ventana como la de la Figura 8 nos aparecerá indicando los archivos que se han modificado y pidiendo un mensaje de registro de esta nueva versión. Este mensaje servirá para que el usuario y otros usuarios tengan un mensaje de referencia de los cambios realizados en esta versión. Autor: Martín Belzunce 6
Figura 7. Figura 8. De esta forma hemos avanzado en el desarrollo de nuestro trabajo y los cambios han quedado registrando. Autor: Martín Belzunce 7
Por último, si nos encontráramos en otra copia local, veremos que los nuevos cambios no se encuentran en la misma. Sin embargo, kdesvn se da cuenta que la copia local difiere del HEAD del repositorio y en estado nos indica que deberíamos actualizarlo (Figura 9). Para realizar esto seleccionar la carpeta o el archivo y hacer clcik en el botón de Actualizado. Ahora nuestra copia local estará actualizada a HEAD y podremos seguir trabajando con los cambios hechos desde otra ubicación. Figura 9. Autor: Martín Belzunce 8
Trabajando con svn desde la Línea de Comandos El uso de svn desde la línea de comandos es bastante sencillo y a medida que nos familiaricemos con la misma veremos que puede ser más rápido y cómodo trabajar de esta forma. Simplemente deberemos recordar un pequeño repertorio de comandos. Todos estos inician con la palabra svn. A continuación reproducimos un ciclo de trabajo similar al anterior. Para crear una copia local usaremos el comando svn checkout al que se le pasan como parámetros la url del repositorio y el path de la carpeta donde queremos generar la copia local: svn checkout http://svn.electron.frba.utn.edu.ar/r1043/belzunce /home/martin/info1/repo Luego, adentro de nuestra copia local podremos preguntar el estado del mismo con: svn status Como respuesta se indicará si hay algún archivo modificado o si hay archivos no versionados dentro de la carpeta. Si deseamos agregar un archivo usamos: svn add archivo.c El archivo se ha agregado a la copia local, para confirmar el cambio en el repositorio: svn commit m Mensaje de log del usuario Este comando lo utilizaremos siempre que deseemos confirmar un cambio en el repositorio, sea para agregar archivos o carpetas nuevas como para confirmar modificaciones de un archivo ya existente en el repositorio. Por último, para actualizar nuestra copia local al HEAD del repositorio usaremos: svn update Con este set reducido de comandos podremos tener acceso a las funcionalidades básicas de subversión. Autor: Martín Belzunce 9