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!