TortoiseSvn es un cliente de Subversion (svn) para Windows que puede ser integrado al explorador de carpetas. Presenta muchas características interesantes entre las cuales se encuentra la posibilidad de crear una ramificación (branch) de nuestro proyecto para poder separar el desarrollo en secciones que conservan una historia de revisiones separadas. Esto es bastante útil frente a la necesidad de tener que revertir los cambios que realizamos sin la necesidad de perturbar la rama principal de nuestro proyecto. En este articulo veremos como llevar a cabo este proceso.
Lo primero que haremos es crear un repositorio:
Utilizaremos un repositorio local para nuestro ejemplo. Durante la creación del repositorio tenemos la posibilidad de crear la estructura de carpetas más adecuada para trabajar con svn (trunk/branches/tree):
Esta estructura nos permite tener el desarrollo principal de nuestro proyecto en la carpeta trunk y además tener una carpeta aparte (branches) para realizar cambios de prueba, sin ensuciar el proyecto principal con bugs menores. La carpeta tags (que si bien se puede utilizar exactamente igual que la carpeta branches o incluso que trunk) se utiliza por convención para realizar snapshots de nuestro proyecto en un determinado punto del desarrollo. Es decir, no es conveniente realizar commits sobre la carpeta tags (incluso el svn nos advierte en caso de que queramos hacerlo).
Luego de crear nuestro repositorio, vamos a crear una carpeta con la primera versión de nuestro proyecto al que llamaremos proy.1.0 dentro de la carpeta trunk. Este será el origen de nuestro primer checkout, para poder empezar a trabajar sobre nuestro proyecto:
Una vez realizado el checkout, decidimos que queremos realizar unos cambios, pero sin entorpecer el desarrollo principal de nuestro proyecto. Por consiguiente vamos a crear nuestro primer “branch”:
Y allí vamos a indicar el destino de la creación y que queremos cambiar inmediatamente nuestro directorio para que apunte a esta nueva dirección. En esta parte podemos especificar también una revisión especifica a partir de la cual queremos realizar el branch.
Supongamos ahora que creamos un archivo y una carpeta para esta nueva versión:
Y decidimos que queremos volver a trabajar sobre el directorio principal de nuestro proyecto (trunk) y que queremos replicar los cambios que hicimos en donde estuvimos trabajando. Para ello debemos hacer un “merge” de estas dos versiones. Lo primero que hacemos es cambiar nuestra dirección de trabajo a la carpeta trunk:
Vemos que en nuestro proyecto principal, todavía no hay ningún archivo o carpeta creada. Procedemos a realizar el merge del directorio /trunk/proy.1.0 con el directorio /branches/proy.1.0:
Elegimos la opción para reintegrar un branch hacia el directorio trunk. Esta opción también puede utilizarse para reintegrar cualquier tipo de versión hacia otra (por ejemplo desde /trunk hacia /branches o desde /branches hacia /tags, incluso desde una versión hacia otra en la misma carpeta: /trunk/proy.1.0 hacia /trunk/proy.2.0).
Como vemos, el merge se realizo correctamente. En caso de que se produzca algún conflicto, que es lo mas común cuando se trabaja de este modo, podemos corregir los conflictos clickeando con el botón derecho sobre la línea del conflicto en el dialogo anterior.
Ahora podemos ver que en nuestro directorio principal tenemos los cambios realizados en nuestro branch. En este punto podemos decidir realizar un punto de restauración de nuestro proyecto y realizar un branch hacia la carpeta /tag. Luego si algo sale mal podemos volver el desarrollo de nuestro proyecto a ese tag si así lo deseamos. Incluso podemos querer aumentar la versión de nuestro proyecto en /trunk para lo cual podemos realizar también un branch sobre la misma carpeta /trunk y cambiar nuestro directorio de trabajo a esa carpeta.
Es importante notar que el svn no realiza una copia de todos nuestros archivos cada vez que realizamos un branch sino que utiliza un método que permite crear un link interno hacia la revisión de la cual se creo el branch.
Fuente: http://tortoisesvn.net/docs/release/TortoiseSVN_es/