David

Categories

Latest News

Monthly archives

Links


Search




Subversion

¿Qué es Subversion?

Introducción

Subversion es un sistema software de licencia libre Apache/BSD [1] que permite realizar un control de versiones sobre un determinado proyecto. Normalmente se utiliza sobre el código fuente de un proyecto, aunque es útil utilizarlo también sobre documentación o manuales; incluso el desarrollo de un libro puede llevarse mediante el control de versiones.

Cada proyecto se almacena en un repositorio Subversion, que no es más que un directorio especial del disco duro donde se almacenan los ficheros del proyecto.

Según [2] las tareas básicas que un sistema de control de versiones cumple son:

Otras tareas que generalmente cumple el sistema de control de versiones son:

Ventajas

Subversion ha reemplazado [3] en muchos ámbitos al CVS [4, 5], el sistema de control de versiones de licencia libre que fue por mucho tiempo el sistema más utilizado. Subversion permite realizar algunas tareas que con CVS no era posible realizar:

Funcionamiento general

Los ficheros de un determinado proyecto están asociados a un repositorio. El repositorio es el almacén de los ficheros de ese proyecto y el encargado de llevar el historial de cambios entre versiones.

La primera vez que se utiliza el repositorio, deben introducirse en él los ficheros iniciales del proyecto, esto se llama el import inicial. Una vez hecho esto, cualquier usuario con permiso para acceder al repositorio puede descargar los ficheros en su ordenador y modificarlos localmente; esta operación es el checkout.

Cuando los cambios que ha realizado son satisfactorios, puede actualizar los ficheros del repositorio con su copia local. Esto se denomina commit. Si hubiera algún conflicto entre los ficheros locales y los del repositorio (porque otro usuario cambió los ficheros del repositorio previamente) se deberá realizar la operación de resolución de conflictos o merging.

Repositorios

Estructura de directorios

Dentro de un repositorio svn se pueden encontrar varios proyectos, cada uno de ellos con su propio árbol de desarrollo.

Dentro del directorio de cada proyecto encontramos tres subdirectorios: trunk, branches y tags. El primero contiene el código fuente de la rama principal de desarrollo; el directorio branches contiene bifurcaciones de la rama de desarrollo paralelas a ésta cuyos trabajo puede en el futuro unificarse con la rama principal; el directorio tags almacena copias de la versión de desarrollo en determinadas fechas y normalmente es de sólo lectura.

Crear un repositorio

Creamos un repositorio llamado svn con la siguiente orden

$ svnadmin create proyecto1

Esto crea un directorio llamado proyecto1 en el directorio actual que contendrá toda la información necesaria por Subversion para gestionar el control de versiones de un determinado proyecto de nombre proyecto1.

Supongamos que estamos trabajando en el proyecto almacenado en nuestro directorio personal /home/david/misproyectos/atomo y que deseamos que el proyecto sea gestionado por Subversion.

Realizamos un import inicial del proyecto, lo que copia el trabajo que ya tenemos hecho en nuestro directorio personal al directorio gestionado por subversión.

$ svn import file:///home/david/atomo /home/david/proyecto1 -m ‘Import inicial'

Ahora en el directorio /home/david/proyecto1 se encuentra la información de nuestro proyecto que teníamos previamente en el directorio local. Es interesante que el contenido de nuestra copia inicial de trabajo tenga ya la estructura de directorios mencionada más arriba.

Repositorios remotos

Se puede acceder a un repositorio remoto especificando su dirección de acceso, que normalmente es una dirección http: http://servidor/svn/proyecto1. Para crear un repositorio remoto se debe tener acceso al directorio de repositorios del servidor web y utilizar la orden de crear repositorio.

Operaciones

Import

Operación para introducir en el repositorio la primera revisión de un proyecto. La operación puede realizarse situándose el usuario en el directorio local que contiene la primera revisión y utilizando la orden:

$ svn import . http://localhost/svn/proyecto1/trunk

En este caso se está realizando el import inicial en un repositorio remoto situado en http://localhost/svn/proyecto1.

Es una buena idea que el import inicial contenga únicamente la estructura de directorios que se utilizará posteriormente (los directorios trunk, branches y tags)

Checkout

Operación que permite traernos el código fuente de un repositorio para trabajar con el localmente.

$svn checkout http://localhost/svn/proyecto1

La orden crea un directorio local proyecto1 con el contenido del repositorio y que puede modificarse sin alterar el contenido del repositorio.

Commit

Operación utilizada para subir los cambios locales al repositorio.

$ svn commit http://localhost/svn/proyecto1 -m “Mensaje”

Con esta orden actualizamos al repositorio los cambios hechos a la copia de trabajo local (debemos encontrarnos en un directorio previamente obtenido mediante checkout), con la adición de un mensaje.

Merging

Acción de combinar un fichero fuente del repositorio que fue modificado por otro usuario y los cambios realizados localmente.

Cuando se intenta realizar un commit de uno o más ficheros modificados localmente, y los cambios alterarían ficheros modificados previamente por otro usuario, Subversion avisa al usuario de que existen conflictos y de que es necesario resolverlos antes de seguir adelante.

Para realizar el merging, el usuario, debe realizar un update. El comando update crea nuevos ficheros con extensiones .rXX y .rYY, donde XX e YY son los números de revisión de los ficheros. Uno de ellos es el fichero que el otro usuario subió previamente al repositorio y otro es el fichero que el presente usuario desea subir al repositorio. El fichero en cuestión sin extensiones es marcado con una serie de etiquetas que indican los puntos conflictivos.

Una vez esos puntos conflictivos se solucionen, el usuario puede utilizar la orden resolved para indicar a Subversion que los cambios han sido correctamente unificados.

$ svn resolved

A continuación ya puede realizarse el commit normalmente.

Manipulación

El número de ficheros del repositorio puede variar con el tiempo, siendo necesario añadir nuevos ficheros fuente, borrar ficheros antiguos o cambiarles el nombre para que este se ajuste mejor a su contenido. Las tres operaciones siguientes cumplen estas funciones. Los tres comandos actúan sobre la copia local y no es hasta la realización del commit que los cambios son actualizados al repostitorio.

Add

Este comando sirve para añadir un fichero creado en la copia local al repositorio.

$ svn add <nombre del fichero>

Delete

Este comando permite eliminar del repositorio un fichero.

$ svn delete <nombre del fichero>

Move

Mediante este comando puede cambiarse el nombre de un fichero o su localización dentro del árbol de directorios del proyecto.

$ svn move <nombre del fichero> <nuevo nombre del fichero>

Otras fuentes

Este texto es una pequeña introducción a Subversion y que sirve como guía para un curso corto introductorio. Un manual completo mucho más detallado puede encontrarse en [6].

Bibliografía

  1. Subversion. [cited 2007 09/10/2007]; Available from: http://subversion.tigris.org/.
  2. Control de versiones. Wikipedia [cited 2007 09/10/2007]; Available from: http://es.wikipedia.org/wiki/Control_de_versiones.
  3. Subversion. Wikipedia [cited 2007 09/10/2007]; Available from: http://es.wikipedia.org/wiki/Subversion.
  4. Concurrent Versions System. Wikipedia [cited 2007 09/10/2007]; Available from: http://es.wikipedia.org/wiki/CVS.
  5. Concurrent Versions System. [cited 2007 09/10/2007]; Available from: http://www.cvshome.org/.
  6. Collins-Sussman, B., B.W. Fitzpatrick, and C.M. Pilato, Version Control with Subversion. First ed, ed. O’Reilly. 2004. 319.

Posted by dsuarez Posted in: informática No Comments » October 2007