Control de versiones con Subversion - Control de versiones con Subversion
2 - Control de versiones con Subversion
Subversion es uno de los sistemas de control de versiones más modernos y utiliza un sistema con repositorio centralizado y fue diseñado como remplazo del sistema más utilizado hasta la fecha, CVS[1]. Subversion es un proyecto de software libre maravillosamente documentado gracias al libro Version Control with Subversion . Esta introducción puede considerarse un resumen de los contenidos de este libro.
El control de versiones se basa en una serie de acciones más o menos estándar de comunicación entre la copia de trabajo y el repositorio. Estas acciones son precisamente las que permite el cliente Subversion. No se entrarán en detalles de cómo administrar un repositorio y cómo se resuelven conflictos entre el repositorio y la copia de trabajo. Es una introducción a todas las prácticas beneficiosas del control de versiones; Subversion no es más que un ejemplo práctico.
2.1. Instalar Subversion
Instalar subversion es sencillo tanto en UNIX como en Windows. Es un programa común en GNU/Linux, no ocupa más de unos pocos megabytes y todas las distribuciones lo incluyen. En Debian bastará con escribir
$ aptitude install subversion
Método que se extrapola a todas las distribuciones con gestión automática de paquetes. Esta operación sirve para instalar tanto el cliente como el servidor. En Windows servidor y cliente suelen instalarse a parte. La mejor manera de instalar un servidor subversion es optar por la distribución SVN-1ClickSetup. El cliente más recomendable es Tortoise svn. Este cliente convierte el mismo explorer en un cliente Subversion, es realmente rápido y cómodo de usar.
Figura 1. Explorer modificado por Tortoise SVN

2.2. Crear un repositorio subversion
Crear un repositorio en UNIX es tan sencillo como lo siguiente:
guillem@pc:~$ svnadmin create repositories/test guillem@pc:~$ cd repositories guillem@pc:~/repositories$ ls test guillem@pc:~/repositories$ cd test guillem@pc:~/repositories/test$ ls conf dav db format hooks locks README.txt
![]() |
Puede surgir la pregunta de por qué subversion ha creado estos directorios en vez de los ya descritos trunk, branches y tags. Esta duda proviene de no haber entendido la diferencia entre el repositorio y la copia de trabajo. Acabamos de crear un repositorio que no contiene ningun archivo sino una base de datos de todos los cambios realizados durante el tiempo. Los desarrolladores de Subversion saben que este error es muy común, por ello han puesto en este directorio el archivo README.txt This is a Subversion repository; use the 'svnadmin' tool to examine it. Do not add, delete, or modify files here unless you know how to avoid corrupting the repository. If the directory "db" contains a Berkeley DB environment, you may need to tweak the values in "db/DB_CONFIG" to match the requirements of your site. Visit http://subversion.tigris.org/ for more information. |
Lo siguente es subir al repositorio los archivos sin versión del ordenador local. Recuérdese que aún no existe ninguna copia de trabajo. Para ello se usa el comando import
guillem@pc:~$ svn import misarchivos \ file:///home/guillem/repositorios/test/misarchivos \ -m "Initial import of misarchivos" Adding misarchivos/cversiones.xml Adding misarchivos/figuras Adding misarchivos/figuras/tortoise.png Committed revision 1.
Ahora el repositorio ya contiene una cantidad mínima de archivos suficiente para crear la copia de trabajo.
![]() |
Es muy importante que el repositorio se encuentre en un ordenador con conexión permanente a internet. Aunque no se necesite ninguna conexión para trabajar con la copia de trabajo la mayoría de las acciones de Subversion requieren algún tipo de comunicación con el repositorio |
2.3. Crear una copia de trabajo
Despues de crear el repositorio y llenarlo con documentos el siguiente paso es crear la copia de trabajo. En el control de versiónes generar una copia de trabajo a partir de una rama o la totalidad del árbol del repositorio recibe el nombre de check out.
guillem@pc:~$ mkdir workspace guillem@pc:~$ cd workspace
Una vez creado el directorio que almacenará las copias de trabajo hay que escoger el método de comunicación con el repositorio. Los cuatro disponibles son:
- file
-
Acceso al repositorio que se encuentra en el mismo ordenador. Aunque a continuación se listan los distintos métodos para acceder a un repositorio es importante que se entienda la sintaxis del comando checkout, para ello nada mejor que utilizar la ayuda mediante el comando svn help. Para consultar un comando en concreto, por ejemplo el anterior, basta con teclear svn help checkout
guillem@pc:~/workspace$ svn checkout \ file:///home/guillem/repositorios/test/misarchivos misarchivos guillem@pc:~/workspace$ ls misarchivos
- http
-
Acceso mediante http. Ideal cuando el repositorio es público. Requiere que el servidor http Apache pueda servir páginas a internet y que sea capaz de comunicarse con subversion. La primera condición suele ser la más restrictiva. Muchos de los servidores subversion de proyectos de software libre utilizan este método para hacer públicos sus repositorios con permiso de lectura.
guillem@pc:~/workspace$ svn checkout \ http://svn.guillem.com/misarchivos misarchivos
- https
-
Acceso mediante http con encriptación SSL
- svn
-
Acceso mediante el propio servidor de archivos de Subversion llamado svnserve.
- svn+ssh
-
Acceso mediante ssh. Es la mejor opción en el caso de repositorios privados de uso personal. El check out se haría con:
guillem@pc:~/workspace$ svn checkout \ svn+ssh:///home/guillem/repositorios/test/misarchivos misarchivos
2.4. Sesiones de control de versiones.
Ya se dispone de un repositorio y de una copia de trabajo. Sólo falta conocer las prácticas más comunes del control de versiones, es decir, cómo utilizar una copia de trabajo Subversion. El método será plantear sesiones ejemplo, con un principio y un final claros.
2.4.1. Una sesión simple
La sesión de control de versiones más simple posible consta de tres pasos, actualizar la copia de trabajo, modificar y crear archivos y subir los cambios al repositorio.
2.4.1.1. Actualizar la copia de trabajo
Es siempre el primer paso antes de realizar cualquier cambio a un documento. El hecho de omitir la sincronización con el repositorio genera la mayoría de los errores de funcionamiento de la copia de trabajo. Para ello sirve el comando
guillem@pc:~/workspace/misarchivos$ svn update
Esto sincroniza recursivamente todos los archivos y directorios a partir de la rama misdocumentos. La acción de este comando depende del directorio donde se ejecute ya que actúa sobre los subdirectorios posteriores y no sobre los previos en el árbol. Por ejemplo, si se desea sincronizar sólo el subdirectorio figuras y no hacer lo propio con el resto del contenido de misdocumentos se ejecutará dentro del directorio correspondiente:
guillem@pc:~/workspace/misarchivos/figuras$ svn update
2.4.1.2. Acciones con archivos
El trabajo normal con un ordenador se basa en modificar, crear y eliminar documentos, el hecho que estén bajo el control de versiones no modifica ni debe modificar estas acciones básicas.
- svn add
-
Añade un documento que ya se encuentra en algún directorio de trabajo al sistema de control de versiones.

No todos los documentos que se encuentran en los directorios de la copia de trabajo están dentro del sistema de control de versiones, deben añadirse explícitamente. Es así como debe ser para evitar que el repositorio se hinche debido a los archivos temporales.
- svn ls
-
Lista los archivos en el directorio actual que están dentro del sistema de control de versiones. Es el método más común para saber qué documentos se encuentran o no en el repositorio.
- svn rm
-
Borra un documento del directorio actual tanto de la copia de trabajo como del repositorio.
2.4.1.3. Subir los cambios al repositorio
Siempre que se cumple algún objetivo es muy recomendable subir los cambios al repositorio. Para ello
svn commit
Acto seguido se abrirá un editor para que, si es necesario, se anoten los comentarios correspondientes en los logs del control de versiones.
2.4.2. Otros comandos
Obviamente los comandos de trabajo con los archivos no se limitan a add, ls, y rm, Subversion cuenta con muchísimos mas. Para tener una idea de la potencia de subversion basta con consultar la ayuda
guillem@pc:~/workspace$ svn help usage: svn "subcommand" [options] [args] Subversion command-line client, version 1.2.0. Type 'svn help "subcommand"' for help on a specific subcommand. Most subcommands take file and/or directory arguments, recursing on the directories. If no arguments are supplied to such a command, it recurses on the current directory (inclusive) by default. Available subcommands: add blame (praise, annotate, ann) cat checkout (co) cleanup commit (ci) copy (cp) delete (del, remove, rm) diff (di) export help (?, h) import info list (ls) lock log merge mkdir move (mv, rename, ren) propdel (pdel, pd) propedit (pedit, pe) propget (pget, pg) proplist (plist, pl) propset (pset, ps) resolved revert status (stat, st) switch (sw) unlock update (up) Subversion is a tool for version control. For additional information, see http://subversion.tigris.org/
Notas
| [1] |
CVS=Concurrent Versions System |
|
Opiniona sobre 'Control de versiones con Subversion - Control de versiones con Subversion' (0)
Opina sobre este tutorial |


