El comando svn switch transforma una
copia local de trabajo existente en una rama diferente. Aunque
este comando no es estrictamente necesario para trabajar con
ramas, representa un buen atajo para los usuarios. En nuestro
ejemplo anterior, tras crear su rama privada, obtuvo una
nueva copia local del nuevo directorio del repositorio. En
su lugar, puede pedirle a Subversion que cambie su copia
local de /calc/trunk
para que refleje
la ubicación de la nueva rama
$ cd calc $ svn info | grep URL URL: http://svn.example.com/repos/calc/trunk $ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch U integer.c U button.c U Makefile Updated to revision 341. $ svn info | grep URL URL: http://svn.example.com/repos/calc/branches/my-calc-branch
Tras “cambiar” a la rama, su copia local no diferirá en nada a una copia local nueva obtenida del mismo directorio. Y normalmente es más eficiente usar este comando, dado que a menudo las ramas sólo difieren entre sí en pocas cosas. El servidor manda únicamente el conjunto mínimo de cambios necesarios para hacer que su copia local de trabajo refleje el directorio de la rama.
El comando svn switch también permite
usar la opción --revision
(-r
), por lo que no siempre tendrá que
cambiar su copia local a la “punta” de la rama.
Por supuesto, la mayoría de los proyectos son más
complicados que nuestro ejemplo calc
,
y contienen múltiples subdirectorios. Los usuarios de
Subversion frecuentemente siguen un algoritmo específico al
usar ramas:
Copiar el 'tronco' entero a un nuevo directorio rama.
Cambiar sólo parte de la copia de trabajo del tronco para que refleje esa rama.
En otras palabras, si un usuario sabe que el trabajo que quiere realizar sólo ocurrirá en un subdirectorio específico, usará svn switch para mover sólo ese subdirectorio a la rama. (¡A veces los usuarios cambian un único fichero de su copia local a la rama!) De ese modo, sigue pudiendo recibir modificaciones normales del 'tronco' en su copia local, pero las porciones que cambió a otra rama quedarán inmunes (a no ser que alguien envíe un cambio a esa rama). Esta característica añade una nueva dimensión al concepto de “copia local mezclada”—no sólo pueden tener las copias locales una mezcla de revisiones, sino también una mezcla de rutas de repositorio.
Si su copia local contiene un número de sub árboles cambiados a otras ubicaciones del repositorio, sigue funcionando de forma normal. Cuando la actualice, recibirá los parches propios de cada sub árbol. Cuando envíe cambios, sus cambios locales seguirán siendo aplicados como un cambio atómico único al repositorio.
Tenga en cuenta que a pesar de que su copia local de trabajo puede reflejar una mezcla de lugares de repositorio, todos estos lugares deben estar dentro del mismo repositorio. Los repositorios de Subversion todavía no son capaces de comunicarse unos con otros; esta característica está planeada para una versión de Subversion posterior a la 1.0.[18]
Dado que svn switch es esencialmente una variante de svn update, comparte el mismo comportamiento; cualquier modificación local en su copia de trabajo es preservada cuando obtiene nuevos datos del repositorio. Esto le permite realizar toda una variedad de trucos ingeniosos.
Por ejemplo, suponga que tiene una copia local de
/calc/trunk
y realiza un número de
cambios sobre ella. De repente se da cuenta de que se suponía
que tenía que realizar esos cambios en una rama. ¡No hay
problema! Cambie su copia local del tronco a la rama con
svn switch, y seguirá manteniendo sus
cambios locales. Ahora puede probarlos y enviar los cambios
a la rama del repositorio.
[18] Usted
puede, no obstante, usar svn
switch con el parámetro --relocate
si la URL de su servidor cambia y no desea abandonar su
copia de trabajo existente. Vea la sección svn
switch en Capítulo 9, Referencia completa de Subversion para obtener
más información y un ejemplo.