Tres vías de fusión: filosofías diferentes

He sido un usuario de UltraCompare Pro desde que salió, y creo que es una herramienta de comparación y fusión muy completa. Sin embargo, dado que he estado investigando más de cerca el DVCS, descubrí que maneja fusiones de tres vías de forma diferente que (¿la mayoría?) Otras herramientas que existen. Entonces me pregunto por qué es eso, y si me estoy perdiendo algo por eso.

En UltraCompare, hay tres paneles de fusión (llamémoslos base, local y otros). Toda la acción de fusión ocurre dentro de estos paneles. En la práctica, esto significa que hago mi trabajo en el panel central (local), fusionando los cambios desde la derecha (otra) o quizás desde el ancestro común a la izquierda (base). El panel central se modifica durante la session y luego se guarda y se compromete como resultado de la fusión. El cuarto panel (window de salida) solo contiene información sobre el resultado del diff.

Captura de pantalla UC http://www.ultraedit.com/assets/images/feature_map/uc/three_way_text.png

En otras herramientas, parece que los tres paneles solo existen en un estado de solo lectura, y que el cuarto, panel inferior (salida) es el lugar donde ocurre toda la fusión. ¿Cuáles son las razones para tener una window de fusión adicional? ¿Es más fácil hacer un seguimiento de todos los cambios? ¿O es así porque todos siempre lo han hecho de esta manera, entonces estamos copyndo ese comportamiento? ¿Cuál es tu opinión sobre esto?

Captura de pantalla kdiff3 http://hginit.com/i/04-kdiff3-after.png

No estoy seguro de si existe una respuesta correcta o mejor, por lo que aún no he hecho esta pregunta CW, pero también acepto su opinión aquí.

Me parece sencillo, es posible que desee mantener visible una versión "local" sin cambios cuando realice los cambios.

original local other merged bar= foo+1 bar= foo+2 bof= foo+2 zot= foo+1 ... ... ... ... print foo print bar print foo+1 print bar?? 

Tanto local como other han introducido una nueva bar variable. Combina el primer cambio con bof / zot , ve por una taza de té, vuelve e intenta fusionar la print . Espera, ¿qué era el bar en local ? Si el local original no está allí, esa información se ha ido, y usted está buscando con otro editor de text para resolver lo que sucedió.

Este es un ejemplo artificial, pero este tipo de cosas puede suceder fácilmente para cualquier set de cambios que no se puede tener todo en la cabeza y hacer de una sola vez. En general, un 3WM siempre tiene dos elementos variables, cambie A y cambie B. Para reproducir toda la información en eso, necesita cuatro vistas para todas las posibles permutaciones de: 0 (el original), A , B y AB (el unir).

Proyecto: Merge es una herramienta de comparación y fusión que he escrito para XML. Miré el enfoque estándar de 4 paneles y lo descarté casi al instante como una forma muy desperdiciada de mostrar datos. Un punto ampliamente probado en las capturas de pantalla anteriores donde casi todos los paneles muestran exactamente los mismos datos varias veces.

Por lo tanto, desarrollé un enfoque de panel único para mostrar todos los files de input y mostrar cuál de ellos contribuye a la salida. (O donde están las diferencias cuando se comparan files.) Aunque no he permitido la edición de text completamente libre (principalmente debido a cómo se gestionan y referencen los nodos XML) algunas partes de la salida de fusión se pueden editar más o less a medida que lo haría en un editor de text normal. (Mis atajos de keyboard de editor siguen de cerca los de Visual Studio en lo que a navigation se refiere). Más notablemente son los datos de los caracteres, los comentarios y los valores de los attributes. También puede cortar y pegar nodos XML en su totalidad. (Pero obviamente solo como text para aplicaciones externas.)

La siguiente captura de pantalla muestra una combinación tripartita con la mayoría de los cambios que aparecen en el file 'izquierdo' y un conflicto no resuelto debajo del cambio seleccionado:

texto alternativo

Personalmente, me gusta la herramienta de fusión forzosa (p4merge). También tiene 4 windows: centro superior para el original (antes de la bifurcación), izquierda para la bifurcación de destino, derecha para la bifurcación de origen y la parte inferior es editable.

Me gusta más que su opción 1, ya que los 3 files originales pueden tener información importante que puede influir en la fusión.

Básicamente, hay dos forms de mostrar las diferencias entre dos files:

  • Dos paneles uno al lado del otro
  • Un panel

Gráficamente:

 aaa aaa bbb ··· ··· ccc ddd ddd 

y

  aaa -bbb +ccc ddd 

Algunos progtwigs usan el primero (por ejemplo, WinMerge) y algunos progtwigs permiten elegir (por ejemplo, TortoiseMerge o Google Project Hosting). Probablemente es una cuestión de gusto, pero el segundo me parece más intuitivo cuando quieres rastrear los cambios. Sin embargo, necesita dos paneles cuando desee editar cambios.

Al hacer combinaciones de tres vías , los diferentes layouts provienen de esto. Ultra compare utiliza el enfoque de panel único para mostrar los cambios para que obtenga dos paneles más un tercer panel para editar. Otros progtwigs usan el enfoque de dos paneles para mostrar los cambios, de modo que obtienes tres paneles más un cuarto para las ediciones.

Nuevamente, creo que es solo una cuestión de gusto.