Differences between revisions 7 and 12 (spanning 5 versions)
Revision 7 as of 2005-08-26 01:36:29
Size: 3144
Editor: waste
Comment:
Revision 12 as of 2010-05-10 15:57:37
Size: 3185
Editor: LuisMunoz
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#language es
Line 5: Line 7:
["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. [[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.
Line 28: Line 30:
Y hacemos un ["Commit"] del cambio: Y hacemos un [[Commit]] del cambio:
Line 33: Line 35:
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 45: Line 47:
Por ahora todo bien. Tratemos de hacer la actualización de ficheros en el directorio de trabajo (["Update"]). Por ahora todo bien. Tratemos de hacer la actualización de ficheros en el directorio de trabajo ([[Update]]).
Line 54: Line 56:
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 59: Line 61:
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. 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.
Line 61: Line 63:
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 64: Line 66:
----
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 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

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