Bibliografía

O'Reilly tiene un libro muy bueno sobre el uso de SVN, que además de poderse comprar en versión impresa, se puede descargar y ver directamente en Internet. La dirección de la página web del libro es la siguiente:

http://svnbook.red-bean.com/index.en.html

También hay traducciones del libro a otros idiomas, entre los que está el Español, pero dado que su estás no están tan actualizadas como la versión en Inglés, no es recomendable usar estas traduciones.

Comandos útiles

Comando "status"

El comando "status" permite comprobar el estado de los ficheros de una copia de trabajo desde el punto de vista del SVN. Esto es, si un fichero o directorio esta contemplado para ser añadido al repositorio, si está modificado, etc...

  svn status
  svn st # versión simplificada

El comando "status" por defecto comprueba este estado respecto a la versión base de la copia de trabajo, por lo que no comprueba este estado respecto de la última versión disponible en el repositorio central. En caso de querer comprobar el estado de la copia de trabajo respecto de la última versión del repositorio hay que usar la opción -u.

  svn st -u

Comando "merge"

Mezcla de un único commit:

svn merge -c commit URLReferencia:

Nota: El comando "merge" admite la opción --dry-run, que permite comprobar que es lo que pasaría si se realizará la mezcla, pero que no la lleva a cabo. Esto es especialmente útil para ver que posibles conflictos pueden surgir.

* commit: número de commit (o revisión) que se quiere mezclar. Este número de versión puede ir precedido de un signo negativo (-) indicando que lo que se quiere hacer es deshacer el commit.

* URLReferencia: es una URL a un repositorio o copia de trabajo de la que se extraerá la información a mezclar.

Ejemplo, si se tiene una copia de trabajo que está en la versión X y en el repositorio se han ido haciendo commits y ahora mismo está en la versión Y y nosotros queremos aplicar únicamente el commit Z (que según este planteamiento cumpliría que X < Z <= Y). El comando para ejecutar en la linea de comandos sería:

svn co https://svn.forge.morfeo-project.org/svn/ezwebplatform/ezweb_platform/src/trunk copiaDeTrabajo
....
Revisión obtenida: X

...
# Pasa el tiempo y el repositorio ahora está en la revisión Y
cd copiaDeTrabajo
svn merge -c Z .

En este caso, nos vale usar "." como URL de referencia dado que el directorio copiaDeTrabajo es una copia de trabajo. Como se verá más adelante, este argumento es útil para mezclar cambios de otra copia de trabajo o de una rama.

Mezcla de un rango de commits:

svn merge -r REV1:REV2 URLReferencia

* REV1: revisión inicial.

* REV2: revisión final.

El comando merge comprueba los cambios que se han echo entre las revisiones REV1 y REV2 y los intenta aplicar a la copia de trabajo. Esto implica que los cambios realizados en el commit correspondiente a la versión REV1 no son aplicados, aunque los del commit asociado a REV2 si son aplicados.

Además, en caso de que REV2 sea una revisión anterior a REV1, se mezclará los cambios a la inversa, esto es.. se desharán los cambios.

Realmente la opción -c del comando merge es una simplificación de la opción -r:

* "-c Z" equivale a "-r Z-1:Z"

* "-c -Z" equivale a "-r Z:Z-1"

Mezcla de cambios realizados en otras ramas

Para llevar a cabo está operación, simplemente hay que usar acordemente el argumento URLReferencia del comando merge. En este caso esta URL tiene que apuntar a la URL correspondiente a la rama o a una copia de trabajo que represente a esta.

Por ejemplo, si tenemos la rama https://svn.forge.morfeo-project.org/svn/ezwebplatform/ezweb_platform/src/branches/unstable y queremos mezclar el commit Z de esta rama dentro de trunk (por ejemplo porque arregla un fallo que también está en la versión estable), el comando a ejecutar sería:

  [
    svn co https://svn.forge.morfeo-project.org/svn/ezwebplatform/ezweb_platform/src/trunk copiaDeTrabajo
    cd copiaDeTrabajo
  ]

  svn merge -c Z https://svn.forge.morfeo-project.org/svn/ezwebplatform/ezweb_platform/src/branches/unstable