Publicado en Español

que es para mi SVN y subversion

Esta tarde Ines me pregunto que era SVN, y en vez de escribirle un correo completo, pense que mejor lo escribo aqui por si alguien se lo pregunta mas tarde.

SVN viene de Subversion que es un sistema de versionado. Guay, ¿y?, ¿Que es un sistema de versionado?. Pues una manera de guardar tanto los ficheros como sus modificaciones.
Dentro de sus caracteristicas se incluye:

  • un repositorio remoto donde se alojan las copias y revisiones comunes.
  • A la vez permite mantener una copia local donde se trabaja de forma independiente, cuando se cree conveniente, la copia se envia al repositorio remoto y el sistema verifica que no existen conflictos entre las diferentes copias.
  • Otra caracteristica es la de permitir la muestra de cambios entre diferentes versiones, aunque esto tiene una major efectividad entre los ficheros de texto escrito, tambien es posible utilizarlo para ficheros binarios.

Nada mejor que un ejemplo para explicarlo:

Carolina y yo nos casaremos el proximo 12 de agosto y tenemos una lista de invitados. Tanto nuestros padres como cada uno de nosotros tenemos nuestros invitados.

La lista esta alojada en un servidor (ver.apertus.es) y dentro de un repositorio (repos). En ese repositorio hemos creado un apartado que se llama boda y en el un fichero de texto que hemos llamado invitados.txt . Para poder empezar a trabajar en ese fichero lo primero que haremos sera descargar ese fichero en nuestro ordenador:

svn checkout http://ver.apertus.es/repos/boda miboda

El comando checkout ha creado un directorio llamado miboda y dentro aparece un fichero que se llama invitados.txt , tanto sus padres, los mios, Carol y yo hemos echo esta operación en diferentes ordenadores, y a partir de este momento podemos empezar a añadir nuestros invitados.

Una vez que empiezas a modificar la lista puedes en cualquier momento añadir tus cambios al repositorio, para eso en el directorio miboda utilizaremos:

svn commit -m "mis amigos de inglaterra"

«mis amigos de inglaterra» puede ser cualquier comentario que creas que es útil para identificar que es lo que se ha cambiado sin necesidad de ver todas las lineas que se han modificado.

Al realizar ese comando la versión de invitados.txt se incrementa, pero la copia que cada persona tiene en su propio ordenador no se ha modificado.

Antes de añadir ningún invitado mi Madre me pregunta si yo he añadido a su familia o ella tiene que hacerlo, con lo que le pido a mi Madre que actualice su versión:

svn update

Ahora ve que como buen hijo, los invitados de la Familia Castañeda Escudero estan incluidos y ella solo debe de añadir sus amigos.

Carol tiene clara su lista de invitados y quiere añadir a su peña, con lo que ejecuta:

svn commit -m "las cheskcover"

El sistema ha dado un error de conflicto. Veamos que es lo que pasa. El sistema se queja por que la linea 47 se esperaba:

== amigos ==

pero en vez de eso el fichero en el repositorio contenía

== Peña katafaus ==

Carol se habia puesto a trabajar sobre la copia original y edito la linea 47 y escribio

== Peña Cheskcover ==

Al añadir (commit) mi copia, el sistema reemplazo «amigos» por «Peña Katafaus». Después Carol intento hacer lo mismo, pero el sistema no puede reemplazar «amigos» por que ya no esta.

Esto conflicto requiere que Carol revise esa linea y revise manualmente que cambio es el correcto. Por suerte las otras lineas se añadieron correctamente y la lista ha quedado completa.