Differences between revisions 7 and 8
Revision 7 as of 2005-08-26 01:36:29
Size: 3144
Editor: waste
Comment:
Revision 8 as of 2008-01-15 16:26:12
Size: 3167
Editor: abuehl
Comment: cat
Deletions are marked like this. Additions are marked like this.
Line 64: Line 64:
----
CategorySpanish

SpanishTutorial - fusionando cambios conflictivos

Ya hemos aprendido cómo realizar fusiones de código simples en SpanishTutorialMerge.

["Mercurial"] es capaz de manejar también casos de fusión de código más complejos. No es tan raro el caso de que dos personas editen exactamente las mismas líneas de un fichero, y entonces haya que decidir qué hacer ¿cuál de los dos cambios predominará?. Cuando se dan estos casos los denominaremos conflictos; cuando se ha decidido qué hacer al darse un conflicto, se dice que se ha resuelto el conflicto.

Vamos a crear una situación artificial de conflicto. Comenzamos haciendo un clon de hola-mio:

 $ cd ..
 $ hg clone hola-mio hola-mio-no-cvs

Ahora añadimos una nueva línea de salida en hello.c:

 $ cd hola-mio-no-cvs

Cambiaremos main para que ponga lo que sigue:

 int main(int argc, char **argv)
 {
     printf("hello, world!\n");
     printf("sure am glad I'm not using CVS!\n");
     return 0;
 }

Y hacemos un ["Commit"] del cambio:

 $ hg commit -t'Doy gracias de esquivar las balas'

Recordar que en SpanishTutorialFirstChange creamos un ChangeSet en ["hola-mio-nueva-salida"] quetambién añadía una segunda línea a la salida. ¿Que ocurrirá cuando tratemos de propagar ese cambio aquí?

 $ hg pull ../hola-mio-nueva-salida/
 pulling from ../hola-mio-nueva-salida/
 searching for changes
 adding changesets
 adding manifests
 adding file revisions
 modified 1 files, added 1 changesets and 1 new revisions
 (run 'hg update' to get a working copy)

Por ahora todo bien. Tratemos de hacer la actualización de ficheros en el directorio de trabajo (["Update"]).

 $ hg update
 this update spans a branch affecting the following files:
  hello.c (resolve)
 aborting update spanning branches!
 (use update -m to perform a branch merge)

Al igual que en SpanishTutorialMerge, tenemos que ejecutar update -m. Pero aquí las cosas cambian. Ahora ["Mercurial"] no puede fusionar automáticamente, porque la misma línea del mismo fichero de código se ha modificado de manera distinta en cada ChangeSet (el que acabamos de introducir con un ["Commit"], y el que acabamos de propagar mediante ["Pull"]).

 $ hg update -m

En este punto lo que ocurra puede depender de la suerte. Si tenemos suerte, y tenemos un programa para fusionar (["MergeProgram"]) instalado, se pasará a ejecutar dicho programa. En él podremos ver los conflictos que hay entre los distintos cambios y decidir cómo resolverlos.

Si no tenemos suerte, y no tenemos un programa de fusionado instalado (["MergeProgram"]), pasaremos a nuestro editor de texto, el cual mostrará el fichero que necesitamos fusionar. Hacer ésto a mano esmuy proclive a errores además de tedioso. Es mejor salir del editor y usar el comando hg undo para invertir el efecto de la propagación de cambios con ["Pull"], y luego instalar un programa para gestionar las fusiones (["MergeProgram"]) y probar de nuevo.

Ahora continuaremos en SpanishTutorialConclusion.


CategorySpanish

SpanishTutorialConflict (last edited 2010-05-10 15:57:37 by LuisMunoz)