Differences between revisions 1 and 8 (spanning 7 versions)
Revision 1 as of 2005-08-26 00:57:51
Size: 3150
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 1: Line 1:
== ["SpanishTutorial"] - fusionando cambios conflictivos == == SpanishTutorial - fusionando cambios conflictivos ==
Line 7: Line 7:
Vamos a crear una situación artificial de conflicto. Comenzamos haciendo un clon de ''hola-mio'': Vamos a crear una situación artificial de conflicto. Comenzamos haciendo un clon de {{{hola-mio}}}:
Line 13: Line 13:

Ahora añadimos una nueva línea de salida en ''hello.c'':
Ahora añadimos una nueva línea de salida en {{{hello.c}}}:
Line 19: Line 18:

Cambiaremos ''main'' para que ponga lo que sigue:
Cambiaremos {{{main}}} para que ponga lo que sigue:
Line 30: Line 28:
Line 36: Line 33:

Recordar que en SpanishTutorialFirstChange creamos un ChangeSet en ["hola-mio-nueva-salida"] que /también/ añadía una segunda línea a la salida. ¿Que ocurrirá cuando tratemos de propagar ese cambio aquí?
Recordar que en SpanishTutorialFirstChange creamos un ChangeSet en ["hola-mio-nueva-salida"] que''también'' añadía una segunda línea a la salida. ¿Que ocurrirá cuando tratemos de propagar ese cambio aquí?
Line 49: Line 45:
Line 59: Line 54:

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"]).
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"]).
Line 65: Line 59:
Line 68: Line 61:
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 es /muy/ 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. 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 es''muy'' 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.
Line 71: 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)