Una manera más sencilla de recuperar cualquier situación anterior de un fichero presente en su copia de trabajo es usar
svn
update
. Esta orden actualiza sus objetivos a su situación en la revisión indicada (por defecto a la revision
HEAD). Por ejemplo,
$ svn update -r42 include
devuelve el directorio
include (y sus contenidos) a la revisión 42. (También se usa
update cuando se quiere integrar cambios de otra copia de trabajo en la copia de trabajo propia, pero cubriremos esto en otro artículo). Subversion proporciona un mecanismo más potente para controlar los puntos de publicación de sus proyectos:
etiquetas y
ramas. Desde el punto de vista de Subversion, no hay diferencia entre etiquetas y ramas; la diferencia está
en como las usaremos.
Para crear una etiqueta o una rama, use la orden
svn copy.
svn copy crea una copia del recurso versioneado (un fichero o un directorio), al tiempo que conserva su historia. En otras palabras, no añade un fichero (o un árbol entero) - solamente marca una nueva entrada en el repositorio como idéntica a otra,
en una revisión indicada. Así, las copias se realizan en tiempo constante, aunque lógicamente pueden crear enormes árboles paralelos.
Veamos un ejemplo. Supongamos que acabo de publicar un nuevo
frobnizer, versión 2.0, y que quiero que Subversion recuerde por mí que
frobnizer v2 corresponde a la revisión 42. Suponiendo que el actual nivel de revisión del directorio
tronco en mi copia de trabajo es 42, diré:
$ cd ~/frobwork
$ svn copy trunk frobnizer-2.0
$ svn commit -m 'Versión v2.0'
Mi repositorio tiene ahora dos subdirectorios principales:
/frobnizer/tronco y
/frobnizer/frobnizer-2.0. Parten de la misma revisión, pero ahora cada rama puede evoluciona por separado.
Si decido no enviar ningún cambio al subdirectorio
/frobnizer/frobnizer-2.0, se le llama una
etiqueta. De lo contrario, es una
rama. La ventaja de una etiqueta es obvia. Es posible descargar
/frobnizer/frobnizer-2.0 para obtener el código fuente de
frobnizer v2.
Las ramas son útiles principalmente cuando un equipo de desarrolladores tiene permisos para enviar cambios a un mismo repositorio. Si se tiene que hacer un gran desarrollo experimental, es mejor crear una rama, hacer los cambios en ella, y reintegrarlo al tronco cuando se haya acabado el desarrollo. Esto evita interferencias. Subversion proporciona un mecanismo (la orden
svn merge para informar de los cambios hecho en una rama a otra. Puede que las ramas no sean muy útiles si usted es el único usuario de Subversion en su sistema, y esa es la razón por la que no me voy a extender más sobre este asunto. Sin embargo, los desarrolladores de Subversion recomiendan crear dos subdirectorios,
ramas/ y
etiquetas/, junto a
tronco, para almacenar ramas y etiquetas. (Así es como está organizado el
repositorio de Subversion).