2009-12-18 23 views
8

PrefacioGuía Práctica para la rama de Subversion fusión

me di cuenta que ya hay un montón de preguntas acerca de cómo combinar las ramas de SVN en la pila   desbordamiento. He leído muchos de ellos, pero todavía no he encontrado la información que estoy buscando, así que lea esta pregunta en su totalidad antes de proponer cerrarla como un duplicado.


Necesito unir una rama SVN en otra. Estoy bastante cómodo con la teoría de la bifurcación y la fusión, pero siempre he tenido problemas con la práctica de realizar la fusión, más específicamente, con la identificación y resolución de conflictos. Sospecho que la causa principal de este problema es la falta de comprensión de mi parte de las herramientas necesarias para realizar el trabajo, es decir, TortoiseSVN y las diversas herramientas de fusión visual que están disponibles.

Sobre la base de la lectura de diversos Stack Overflow   preguntas relacionadas, he identificado Sourcegear DiffMerge y Beyond Compare como herramientas de candidatos para la realización de la fusión de tres vías. Probé DiffMerge, pero tuve problemas para usarlo de manera efectiva. Yo esperaba ver los siguientes tres archivos, mientras que la resolución de conflictos

  • Archivo de rama Un
  • del archivo de la rama B
  • Resultado de realizar la combinación de

Pero en lugar de lo que veo es

  • Archivo de la rama A
  • Archivo de la bifurcación B
  • ancestro común de A y B, también conocido como revisión base

Esto me llevó a preguntarse cómo puedo ver el resultado de la fusión después de cada acción tomo la hora de resolver los conflictos visualmente. También tuve problemas para llevar a cabo tal acción, por ejemplo, aceptar un cambio particular de la rama A o B. Después de leer sobre el tema un poco más, ahora parece que la revisión base es de hecho el lugar donde los resultados de la fusión debería mostrarse, ¿es correcto?

Creo que un screencast o video tutorial que demuestre la fusión de sucursales con TortoiseSVN y una herramienta de combinación visual probablemente responda la mayoría de mis preguntas pendientes sobre cómo usar estas herramientas de manera efectiva. Estoy más interesado en el proceso de resolución de conflictos que en la fusión, pero sería genial si ambos estuvieran cubiertos.

Respuesta

1

Perforce tenía una herramienta de fusión que le mostraría las cuatro versiones (base, A, B y combinación) y le mostraría visualmente cómo se vería su fusión.

Al realizar fusiones complejas, en realidad me resulta útil simplemente mirar el archivo sin formato (suponiendo que no se trata de datos de bytes) y comparar las piezas de revisión. Si su fusión es muy complicada (es decir, fusiones superpuestas, código movido, etc.) esta puede ser la única forma de hacerlo.

Otra cosa que he visto hacer es exportar una copia del conjunto de trabajo y luego fusionar manualmente usando una herramienta de lado a lado (como Beyond Compare) y luego hacer un check-in directo.

Lo único que siempre me sorprendió de las fusiones fue que estaban atrasados ​​de lo que esperaba que sucediera. Esto siempre me causa problemas con la revisión base.

5

En realidad, existen herramientas de fusión bidireccionales y triples. Una de dos vías debería mostrar tres ventanas. La versión de la rama de origen A, la versión B de la rama de destino y un resultado de la fusión. Una combinación de tres vías mostrará la versión base además de eso. Usted puede imaginar un tipo de combinación de tres vías como ecuación de Resultado = Objetivo + (Base - Fuente). En efecto, el algoritmo calculará un conjunto de diferencias entre la base y la fuente y otro conjunto entre la base y el objetivo, y luego eliminará todas las diferencias comunes a ambas. Luego, le mostrará una lista de las diferencias restantes para la decisión. Para diffs en origen o destino donde la misma sección de código no se ve afectada en la otra rama, automáticamente decidirá previamente utilizar la diferencia apropiada. Cuando los difs se encuentran en la misma sección de código en ambas ramas, los difs se marcan como un conflicto y su herramienta generalmente lo guiará a través de los conflictos uno por uno. Los conflictos no se deciden previamente y el código no aparecerá en el archivo de resultados hasta que usted tome una decisión. Usted tiene la opción de saltar al siguiente conflicto de diferencias o al siguiente. Todos los conflictos deben ser decididos por usted. En función de su conocimiento, a veces desea retrotraer (volver a decidir) incluso la diferencia no conflictiva para completar la combinación. Así que el proceso de fusión de un archivo consiste básicamente en bajar los diffs o acelerar solo por diferencias conflictivas una a una y decidir si tomar el cambio de rama de origen, cambiar de rama de destino o editar el código en cuestión para crear un archivo nuevo cambio fusionado Los cambios que haga deben aparecer en la ventana de resultados y una vez que decida todos los conflictos, la herramienta debe permitirle guardar el resultado, que luego se convertirá en una nueva versión en la rama de destino. La ventana con el archivo base generalmente se muestra solo para una referencia como una versión que no tiene un cambio de origen o de destino.

Algunas herramientas permiten la llamada combinación automática. En caso de que no haya diferencias conflictivas, la herramienta utilizará la resolución de diferencia predeterminada sin hacerle preguntas. Esencialmente tomar todos los cambios de la rama de origen y destino automáticamente. Aunque léxicamente esos cambios no entran en conflicto, todavía podrían entrar en conflicto de otras maneras. El código resultante puede no compilarse o ser lógicamente correcto. Pero ninguna herramienta de fusión puede decidir eso. Es por eso que los resultados de la fusión deben ser leídos y revisados ​​por un ser humano y luego compilados y ejecutados a través de un conjunto de pruebas antes de ser enviados a la sucursal objetivo.

3

Puede instalar KDiff3 para realizar una fusión de tres vías con TortoiseSVN. Se integra automáticamente con TortoiseSVN en la plataforma de Windows.

Los tres archivos muestran que usted es ancestro común de ambas ramas, archivo de la rama A y archivo de la rama B. A continuación, resuelva los conflictos en el archivo que representa la rama a la que se está fusionando.

Me parece que es una herramienta muy inteligente, y en los casos normales elegirá automáticamente la opción correcta para unir conflictos simples.

Cuando no esté seguro, le preguntará qué hacer.

En ocasiones he tenido problemas en los que eligió el camino equivocado. Esas fueron ocasiones en las que la ruta de bifurcación/fusión era bastante compleja.

Y, como dijo GrayWizard, a veces es más fácil ver el archivo sin formato. Subversion generará un único archivo sin formato en la rama con la que se está fusionando con el marcado para mostrarle qué cambios se realizaron a partir de qué revisión. Una o dos veces tuve que abrir ese archivo en mi IDE y arreglarlo desde allí.

+0

KDiff3 es una herramienta imprescindible para realizar fusiones. –

Cuestiones relacionadas