#language es == 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]] que ''tambié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 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. Ahora continuaremos en SpanishTutorialConclusion. ---- CategorySpanish