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:
- La ruta donde está el proyecto a importar.
- La ruta del repositorio.
- 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 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.
- http://chernando.eu/doc/svn/
- http://svnbook.red-bean.com/