Size: 3144
Comment:
|
Size: 3167
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.