Branch Tag Con Subversion
Subversion no tiene una forma explícita de crear Tags y Branches en el repositorio (a diferencia de CVS, que cuenta con comandos particulares para ambas tareas). En cambio, Subversion utiliza el concepto amplio de "copia de directorios" para realizar ambas cosas.
Organización del repositorio
Existen algunas maneras estándard para organizar el repositorio de código en Subversion, que son las recomendadas. La mayoría de las personas crean un directorio llamado trunk que contiene la "línea principal" de desarrollo (el HEAD en el CVS). Se crean luego directorios de branch que contiene copias de ramifiaciones, y directorios de tag que contienen copias de tags.
Estos directorios (de branch y tag) son simplemente eso: copias de código, sin ninguna característica particular. Los desarrolladores les dan el uso y sentido correspondiente a estas copias.
Si un repositorio contiene un único proyecto, se organiza de esta manera:
/trunk /branches /tags
Si el repositorio contiene múltiples proyectos, generalmente se crea esta misma organización pro proyecto:
/proyecto-A/trunk /proyecto-A/branches /proyecto-A/tags /proyecto-B/trank /proyecto-B/branches /proyecto-B/tags
Por supuesto que uno es libre de ignorar esta organización y utilizar cualquier otra: para Subversion es exactamente lo mismo. Lo importante es que, más allá de la organización elegida, se puede cambiar en cualquier momento. Como los branches y tags son directorios comunes, el comando svn move puede moverlos o renombrarlos a gusto. Por lo tanto, cambiar de una estructura a otra es tan solo ejecutar los comandos para moverlo a una nueva organización.
Igualmente, hay que prestar atención al realizar estos cambios: puede resultar confuso para quienes estén trabajando con ese repositorio. Si un usuario está trabajando con una copia local, y en el servidor se cambia de lugar el directorio, la próxima vez que realice un svn update va a obtener un error indicándole que el path ya no existe más.
Tags
El concepto de "tag" es el de una "fotografía" del proyecto, en un momento dado. En Subversion, este concepto ocurre todo el tiempo: cada commit al proyecto genera un revisión, que es justamente el concepto de tag. Estas revisiones llevan un número secuencial incremental único.
De todas formas, a menudo se quiere contar con tags con nombres más amigables, como ser "release-1.0". O se podría querer tener un tag de un subdirectorio del proyecto.
Al igual que con los branch, crear un tag en Subversion es simplemente realizar una copia de los archivos. Esta copia se ubica en el directorio /tags del proyecto, por ejemplo, /tags/release-1.0.