Uso básico de subversion

Subversion es un sistema de control de versiones bajo Licencia Apache. Creado para sustituir a CVS.

Instalando subversion 

Lo podemos descargar desde la página principal de subversion. Si estamos un ubuntu podemos hacer:

$ sudo apt-get install subversion

Existen también interfaces gráficas para subversion como son KdeSVN y Tortoise.

Sistema de Control de Versiones  
   
Un sistema de control de versiones (por dar una definición distinta a los miles de páginas que hablan de esto) es un programa que permite la copia nuestros documentos sin tener que recurrir a copiarlos con distinto nombre, o en directorios distintos mientras lo estamos desarrollando.
Por ejemplo. suponer que estamos desarrollando un programa en C. Podríamos tener una primer programa que funcione, pero que para nada está completada. Pues una primera versión podría ser esta. Al segundo día de desarrollo, mejoramos la interactividad con el usuario y tocamos muchas cosas del código. Si no nos funciona pueden pasar dos cosas: 
a) Que tengamos una copia de seguridad por cualquier otro lado y recuperarla.
b) Que no la tengamos y si no nos funciona, nos la tenemos que ingeniar para arreglarlo.

Al usar subversion, guardaríamos los cambios en un repositorio, tantas veces como queramos. Si luego, nos hiciera falta volver a una versión anterior, o queremos saber lo que hicimos el 2 de diciembre del 2005 (siempre y cuando esté en el repositorio), podríamos recuperarlo con un simple comando. Esa es la idea, facilitar al desarrollador la creación de programas.  Es más, si hay varios desarrolladores trabajando, cada uno se baja del repositorio los últimos cambios, y al finalizar los expone para que sus compañeros sigan trabajando sin necesidad de tener cientos de carpetas.


Subversion está pensado principalmente para trabajar con ficheros de texto, como es el código fuente de programas. Esto no quiere decir que en nuestro repositorio podamos subir imágenes, ficheros word, etc, pero hay que tener cuidado, porque subversion almacena las diferencias de un fichero a otro. Si es un fichero de texto, las diferencias son las líneas de texto (o trozos de texto, si se quiere ver así) en las que cambia. Mientras que si subimos un fichero binario, al hacer el mínimo cambio, su representación binario es diferente, con lo cuál, el fichero binario será completamente distinto al del repositorio. Esto implica que el repositorio aumentará de tamaño dependiendo del binario y del número de veces que lo versionemos. Por eso, en este aspecto hay que tener cuidado. 

Lo que se suele hacer es versionar los fuentes (ficheros de texto), que es con lo que se trabaja día a día. Si acaso alguna imagen (iconos) que son imágenes que no suelen cambiar.


Creando un repositorio

La forma de crear un repositorio es con el comando svnadmin. Se entenderá mejor con un ejemplo.

$ svnadmin create MiRepositorio

Esto crea una jerarquí de directorios como la siguiente:

$ tree MiRepositorio/
MiRepositorio/
|-- README.txt
|-- conf
|   |-- authz
|   |-- passwd
|   `-- svnserve.conf
|-- db
|   |-- current
|   |-- format
|   |-- fs-type
|   |-- revprops
|   |   `-- 0
|   |       `-- 0
|   |-- revs
|   |   `-- 0
|   |       `-- 0
|   |-- transactions
|   |-- txn-current
|   |-- txn-current-lock
|   |-- txn-protorevs
|   |-- uuid
|   `-- write-lock
|-- format
|-- hooks
|   |-- post-commit.tmpl
|   |-- post-lock.tmpl
|   |-- post-revprop-change.tmpl
|   |-- post-unlock.tmpl
|   |-- pre-commit.tmpl
|   |-- pre-lock.tmpl
|   |-- pre-revprop-change.tmpl
|   |-- pre-unlock.tmpl
|   `-- start-commit.tmpl
`-- locks
    |-- db-logs.lock
    `-- db.lock

10 directories, 25 files


No os preocupéis, en principio no hay que tocar nada de aquí, afortunadamente.


Importar un proyecto

Una vez creado el repositorio, lo que tenemos que hacer es importar nuestros ficheros y directorios donde estábamos haciendo el desarrollo. Suponer la siguiente jerarquía de proyecto:

$ tree Proyecto/
Proyecto/
|-- Dos
`-- Uno
    `-- file.txt

2 directories, 1 file

Dos carpetas y un fichero. Ahora queremos subir esto al repositorio. A este paso se le llama importar el proyecto.


$ svn import /tmp/MiProyecto/ file:///tmp/MiRepositorio/ -m "Creación del proyecto"
Añadiendo      /tmp/Proyecto/Uno
Añadiendo      /tmp/Proyecto/Uno/file.txt
Añadiendo      /tmp/Proyecto/Dos

Commit de la revisión 1.

Donde los argumentos son:
  1. La ruta donde está el proyecto a importar.
  2. La ruta del repositorio.
  3. Comentario acerca de la versión

Ya podemos borrar la jerarquía de proyecto. Ahora solo nos hace falta el repositorio.


Espacio de trabajo

Una vez importado, creamos el espacio de trabajo, que podría ser el el home mismo. Para bajarnos la última versión del programa usamos el argumento checkout de subversion.

$ svn checkout file:///tmp/MiRepositorio/

El segundo argumento es la ruta completa donde está el repositorio. Se nos crea, en el directorio donde lo hayamos hecho, la jerarquía que teníamos del proyecto, con la peculiaridad de que ahora tenemos unos archivos .svn donde estará la información necesaria para comunicarse con el repositorio.

Comandos de trabajo

Los comandos más comunes para el trabajo diario son:

svn update  :  actualiza el repositorio.

$ svn update 
En la revisión 1.


svn add file :  añade un fichero o un conjunto de ficheros al repositorio.

$ svn add file2.txt


svn commit :  guarda los cambios y crea una nueva versión.

$ svn commit -m "Comentario de la version"
Añadiendo      Uno/file2.txt
Transmitiendo contenido de archivos .
Commit de la revisión 2.


Si queremos volver a una versión anterior, una de las formas es asociarla por el comentario que se hizo cuando se produjo el commit.


$ svn log
------------------------------------------------------------------------
r2 | user | 2009-09-17 20:14:37 +0100 (jue 17 de sep de 2009) | 1 line

Comentario de la version
------------------------------------------------------------------------
r1 | user | 2009-09-17 19:52:08 +0100 (jue 17 de sep de 2009) | 1 line

Creación del proyecto
------------------------------------------------------------------------



Por tanto, si ahora queremos recuperar la primera hacemos un checkout de la primera.

$ svn checkout -r 1 file:///tmp/MiRepositorio/ Rev2

Le pasamos -r y luego el número de la versión. La última cadena "Rev2" es simplemente para colocarlo en un directorio llamado Rev2. Lo crea dinámicamente.
Para ver las diferencias usamos la opción diff. Por ejemplo, para ver la diferencia entre la versión 1 y la 2 hacemos:

$ svn diff -r 1:2 file:///tmp/MiRepositorio/
Index: Uno/file2.txt
============================================



Manuales 

No es muy complicado de usar, al menos lo básico y una vez que se acostumbre es muy útil. Esto no es más que un pequeño comienzo. Para ver manuales y tutoriales están las siguiente urls.
  1. http://chernando.eu/doc/svn/
  2. http://svnbook.red-bean.com/

0 comentarios:

Publicar un comentario en la entrada