Ejemplo 2 - Vemos la luz

Ahora que ya sabemos operar con las cosas mas comunes, vamos a ver como interactuamos con otros repositorios, sean o no nuestros.

El primer ejemplo va a ser obtener un repositorio existente, que esta publicado por web. Recordemos que svn tiene varios métodos de acceso (local, ssh, protocolo propio, protocolo sobre webdav).
Vamos a usar un repositorio real, chico y con pocos cambios.

# svn co svn+ssh://luca@svn.llucax.com.ar/var/lib/svn/test wc_test
Password:
A  wc_test/link
A  wc_test/mkfilter
Revisión obtenida: 1
# cd wc_test
#
Vemos que se bajo el repo
# ls -l
total 4
lrwxrwxrwx  1 guestlabi guestlabi   8 2005-05-18 15:55 link -> mkfilter
-rwxr-xr-x  1 guestlabi guestlabi 427 2005-05-18 15:55 mkfilter
#
Para obtener la última versión...
# svn update
No hay nada nuevo
En la revisión 1.
#
Un rato más tarde, luego de que alguien modificó un archivo:
# svn update
Obtenemos los últimos chagesets.
M  arroz-solo
Actualizado a la revisión 4.
#
Ahora hacemos unos cambios, pero alguien más estuvo haciendo cambios y los aplicó antes que nosotros. No importa, subversion, mientras pueda, hará un merge.
# svn ci -m Cambios.
Como cambió el mismo archivo que nosotros, antes debemos hacer un
update para que pueda hacer un merge de los cambios en el servidor a los
nuestros).
Enviando       wc/trunk/arroz-solo
svn: Falló el commit (detalles a continuación):
svn: Out of date: '/trunk/arroz-solo' in transaction '6'
# svn update
Hace el merge sin problemas (notar la G).
G  arroz-solo
Actualizado a la revisión 5.
#
Finalmente, nuestro grupo humano no es perfecto, hubo falta de comunicación y 2 personas corregimos el mismo error (o un error en la misma línea, por ejemplo). Subversion no puede hacer cargo de la situación y nos dice que hay conflicto.
# svn up
No puede hacer el merge, PROBLEMAS (notar la C).
C  wc/trunk/arroz-solo
Actualizado a la revisión 6.
#
Subversion nos deja varios elementos para solucionar el problema:
# ls
ls -l
total 16
-rw-rw----  1 luca luca 471 2005-05-19 18:02 arroz-solo
El archivo con marcas de los conflictos (ya lo veremos en más detalle)
-rw-rw----  1 luca luca 369 2005-05-19 18:02 arroz-solo.mine
Mi versión del archivo.
-rw-rw----  1 luca luca 362 2005-05-19 18:02 arroz-solo.r5
La versión base de archivo, de donde surgió mi version y la nueva
con la que tiene el conflicto.
-rw-rw----  1 luca luca 362 2005-05-19 18:02 arroz-solo.r6
La versión nueva del archivo que provoca el conflicto con mis cambios.
# cat arroz-solo

poner agua a hervir con sal (ponerle bastante sal)

cuando hierva agregar el arroz y bajar un poco el fuego

<<<<<<< .mine
Hasta el "=======" es como está en mi versión.
cuando este, sacalo colandolo bajo agua fria para cortar la cocción
=======
Hasta el ">>>>>>> .r6" es como está en la nueva versión.
cuando este, sacalo colandolo bajo agua fría para cortar la coccion
>>>>>>> .r6

ponerle aceite, puede ser de oliva; poner tambien un chorrin en la fuente
antes, abajo del arroz

cuatro tazas de agua x una de arroz
una taza de arroz por persona (salen 2 platos)

Listo!

Si me olvido que hubo un conflicto y quiero hacer un commit, el
svn no me deja.
# svn ci
svn: Falló el commit (detalles a continuación):
svn: Abortando el commit: '/mnt/burns/luca/documentos/charla_scm/ejemplos/svn/w
c/trunk/arroz-solo' queda en conflicto
#
Editamos el archivo para eliminar el conflicto.
# vi arroz-solo
[...]
# svn diff
# svn diff
Index: arroz-solo
===================================================================
colordiff 1.0.4 (http://colordiff.sourceforge.net/)
(C)2002-2004 Dave Ewart, davee@sungate.co.uk

--- arroz-solo  (revisión: 6)
+++ arroz-solo  (copia de trabajo)
@@ -3,7 +3,7 @@

 cuando hierva agregar el arroz y bajar un poco el fuego

 -cuando este, sacalo colandolo bajo agua fría para cortar la coccion
 +cuando este, sacalo colandolo bajo agua fría para cortar la cocción

  ponerle aceite, puede ser de oliva; poner tambien un chorrin en la fuente
  antes, abajo del arroz
#
Finalmente avisamos al svn que resolvimos el conflicto (es
análogo a borrar todos los archivos que creó para resolverlo)
# svn resolved arroz-solo
Se resolvió el conflicto de 'arroz-solo'
# ls
arroz-solo
Y hacemos el commit.
# svn ci -m "Corregido tilde"
Enviando       trunk/arroz-solo
Transmitiendo contenido de archivos .
Commit de la revisión 7.
#
Listo, esta es uno de los problemas más complejos que se pueden presentar usando subversion, sin incluir los merges entre 2 branches, pero no tienen más magia que esto: si funciona bien, todos felices, si no, a resolver conflictos!