Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

jueves, 17 de abril de 2014

SVN: subversión

El IDE  de Gambas3, posee incluido el soporte para proyectos que tengamos en SVN.

Nos permitirá hacer Updates y  Commit  de nuestros proyectos.

Si tenemos un proyecto en un servido SVN (google code, forge.gambas-es.org, etc), lo que tenemos que hacer es
1) Descargar el proyecto en nuestro disco duro
por ejemplo:
$svn co http://forge.gambas-es.org/svn/proyectoSVN proyectoSVN

2) Arrancamos el ide de gambas3, y abrimos el proyecto: (en la captura elproyectoSVN se llama soprano)


3) Ahora nos vamos al menú Proyecto, y veremos una nueva opción:



4) Si pulsamos sobre esta nueva opción, nos muestra  el siguiente formulario:

5) Podemos "actualizar" o "refrescar información", para comprobar la copia del servidor remoto:
Vemos que los botones de "Consignar" (Commit) no están disponibles

6) Hacemos algún cambio en el proyecto, y nos vamos otra vez a este formulario Proyecto/Control de Versiones".

Ahora aparecen activo el botón de Consignar y dos pestañas más.
En la primera "Cambios" podemos poner el texto que identifica el consignar, normalmente un texto corto que diga lo que se ha cambiado.

En la segunda pestaña "Cambios", podemos ver las diferencias introducidas:
7) Para hacer el Commit, tenemos que introducir nuestro usuario y clave del servidor SVN, y pulsar en el botón "Consignar".

Una vez pulsado el botón de Consignar, en la consola del Ide de Gambas, nos sale información de como ha ido el proceso. Si todo ha ido bien, pulsa "Refrescar Información", y veréis que el Remoto ya esta actualizado:
Con lo cual ya tenemos el servidor actualizado con nuestros cambios.

Nota: OJO!!!!
Si ha habido algún conflicto al subir nuestra versión, nos lo indica la consola, y habría que resolverlo desde consola.
Lo ideal, es que el trabajo entre los programadores del proyecto se reparta, para evitar trabajar en los mismos formularios/clases y módulos, así se evita tener que resolver conflictos.
En el caso de que haya conflictos, hay que revisar las lineas que los dan y/o hablar con el otro programador para ver que cambios son los que se mantienen.


Extra: Resolver conflictos en SVN

Para explicar con mejor detalle, vamos a basarnos en un ejemplo propio y seguimos los pasos.
Primero, nos creamos un archivo test.txt, con el siguiente contenido:
test
Ahora se hace commit al repositorio:
C:\workspace\test>svn ci -m "Primera subida al SVN para conflicto"
Sending        .
Sending        test.txt
Transmitting file data .
Committed revision 2.
Supongamos que tenemos dos usuarios: Usuario1 y Usuario2, los cuales hacen un update:
C:\workspace\test>svn up
A    test.txt
At revision 2.
Ahora Usuario1 modifica el archivo test.txt: (texto que modifica del archivo)
Usuario1 está haciendo una prueba de conflicto
Y tras ello, hace commit:
C:\workspace\test>svn ci -m "Usuario1 empezando un conflicto"
Sending        .
Sending        test.txt
Transmitting file data .
Committed revision 3.
En esta nueva situación, Usuario2 modifica su copia local del archivo test.txt sin saber que existe una nueva revisión de ese archivo en el repositorio:
Usuario2 creando un conflicto
Cuando intenta hacer commit, va a ver el siguiente error:
svn: Commit failed (details follow):
svn: File or directory 'test.txt' is out of date; try updating
svn: resource out of date; try updating
Así que Usuario2 realiza un update:
C:\workspace\test>svn up
Conflict discovered in 'test.txt'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:
SVN detecta que hay un conflicto y le pide al usuario que escoja una opción. En este caso, si elegimos la opción ‘df’ nos va a mostrar los conflictos de la siguiente forma:
--- .svn/text-base/test.txt.svn-base    Tue Aug 10 10:59:38 2010
+++ .svn/tmp/test.txt.2.tmp     Tue Aug 10 11:33:24 2010
@@ -1 +1,3 @@
-test
\ No newline at end of file
+<<<<<<< .mine +test Usuario2 creando un conflictor======= +Usuario1 está haciendo una prueba de conflicto>>>>>>> .r3
Usando la opción ‘e’ se abrirá el editor de textos asociado al cliente SVN. En este caso aparecerá lo siguiente:
<<<<<<< .mine +test Usuario2 creando un conflictor======= +Usuario1 está haciendo una prueba de conflicto>>>>>>> .r3
Así podemos seleccionar nosotros mismos cómo queremos que quede el archivo resultante.
Usuario1 está haciendo una prueba de conflicto Usuario2 creando un conflicto
Guardando los cambios, aparecerán las opciones de conflicto de nuevo. Ahora usando la opción ‘r’ marcará el archivo como merged y una G. La G indica que hubo un conflicto en el archivo y ya está resuelto.
Ya lo único que falta es hacer un commit del archivo resuelto:
C:\workspace\test2>svn st
M       test.txt

C:\workspace\test2>svn ci -m "Conflicto resuelto"
Sending        test.txt
Transmitting file data .
Committed revision 4.


Tutorial obtenido de:
http://blognticjavi.wordpress.com/2011/12/06/como-resolver-un-conflicto-en-svn/
http://www.logicaltrinkets.com/wordpress/?p=178











No hay comentarios:

Publicar un comentario

A falta de donativos... un poco de publicidad