Cómo usar WinMerge como la herramienta Diff para Mercurial

19

Estoy usando el sistema de control de versiones distribuido de Mercurial, y me pregunto cómo puedo configurarlo para usar WinMerge en lugar de su propia herramienta de diferencia interna. Ya tengo WinMerge como herramienta de combinación, pero quiero que Mercurial use WinMerge cuando escribo:

hg diff

¿Hay alguna forma de hacerlo o estoy atascado con la herramienta de diferencias interna de Mercurial?

cuantícula
fuente

Respuestas:

24

De las preguntas frecuentes de TortoiseHg :

Agregue estas líneas a su archivo personal Mercurial.ini

[extensiones]
extdiff =

[extdiff]
cmd.winmerge = C: \ Archivos de programa \ WinMerge \ WinMergeU.exe
opts.winmerge = / e / x / u / wl

Ahora ejecute la herramienta de configuración global. En la pestaña TortoiseHg, debería ver winmerge disponible en la lista desplegable para Visual Diff Command. Seleccione winmerge, aplique, luego cierre.

Este mismo enfoque se puede usar para agregar casi cualquier herramienta de diferencia visual, pero tenga en cuenta que su herramienta de diferencia debe ser compatible con las diferencias de directorio si TortoiseHg la va a utilizar, a menos que esté utilizando la versión 0.8 o posterior.

Joel también proporcionó una solución aquí en caso de que ejecute Mercurial en Cygwin.

Explicación de los argumentos de la línea de comando de WinMerge aquí . Resumen:

  • /e le permite cerrar WinMerge con solo presionar una tecla Esc
  • /x cierra WinMerge (después de mostrar un cuadro de diálogo de información) cuando inicia una comparación de archivos idénticos
  • /u evita que WinMerge agregue cualquiera de las rutas (izquierda o derecha) a la lista de Últimas utilizadas (MRU)
  • /wl abre el lado izquierdo como solo lectura
cschol
fuente
No estoy usando TortoiseHG, ni estoy ejecutando Mercurial con Cygwin. Estoy usando el instalador predeterminado de Mercurial de la línea de comandos de mercurial.berkwood.com . Su solución funcionó, en el sentido de que puedo escribir 'hg winmerge <file>' para ver la diferencia entre esta y la versión anterior, pero 'hg diff <file>' aún muestra la misma (bastante fea) diff herramienta. Aún así, es mejor que nada.
Quanticle
Creo que esta respuesta supone que editará Mercurial.ini en el directorio TortoiseHg (por ejemplo, C: \ Archivos de programa \ TortoiseHg). Si edita el que está en el directorio Mercurial (por ejemplo, C: \ Archivos de programa \ Mercurial), esto no funcionará (al menos no lo hizo para mí).
Ashley Davis el
también c: \ Archivos de programa (x86) \ WinMerge \ WinMergeU.exe
Avram
Asegúrese de no poner comillas alrededor de la ruta a WinMerge en el archivo de configuración, o no funcionará.
Drealmer
7

Así es como funciona para mí: línea de comando mercurial pura que no sea tortoisehg

Primero, edite el archivo (bajo una ventana de 64 bits)

C: \ Archivos de programa (x86) \ Mercurial \ Mercurial.ini

[extensions]
; must uncomment this line
extdiff =

[extdiff]
; i'm using winmerge unicode version
cmd.winmerge = C:\Program Files (x86)\WinMerge\WinMergeU.exe
; it explains winmerge command line parameters here: http://winmerge.org/docs/manual/CommandLine.html
opts.winmerge = /r /e /x /u /wl

Luego, puede usar "hg winmerge ..." en lugar de "hg diff ..."

renfeng
fuente
Me resulta útil ejecutar winmerge en segundo plano para poder ver los cambios mientras configuro el mensaje de confirmación y también mostrar estadísticas sobre qué archivos han cambiado en la línea de comandos. Para hacer esto, coloque un archivo por lotes en el directorio mercurial que contenga start / b hg winmerge <NEWLINE> hg diff --stat
danio
3

Bueno, las respuestas dadas anteriormente no me dan los efectos deseados. No permiten que las revisiones se diferencien y editen en el lugar (me refiero a la misma funcionalidad que está disponible para TortoiseSVN desde el cuadro). Para hacer eso, agregué adicionalmente a mercurial.ini esta sección:

[merge-tools]
winmerge.regkey=Software\Thingamahoochie\WinMerge\
winmerge.regname=Executable
winmerge.priority=-10
winmerge.args=/e /x /wl /ub /dl other /dr local $other $local $output
winmerge.fixeol=True
winmerge.checkchanged=True
winmerge.gui=True
winmerge.diffargs=/r /e /x /ub /wl /dl '$plabel1' /dr '$clabel' $parent $child
winmerge.diff3args=
winmerge.dirdiff=True

Esto está tomado de http://blog.stevehorn.cc/blog/easy-mercurial-visual-diff-between-two.html

alehro
fuente