Git: Cómo configurar KDiff3 como herramienta merge y herramienta diff


Recientemente estaba usando GitExtension 2.46, pero la versión de Git que tiene lo mismo es 1.9.4.msysgit.2. Dispuesto a usar solo comandos de Git, desinstalé GitExtension e instalé la última versión disponible de Gity KDiff3.

Cuando hago una fusión y tengo conflictos, corro el siguiente comando:

$ git mergetool

Entonces recibo el mensaje:

La herramienta de combinación kdiff3 no está disponible como 'kdiff3'.

Supongo que debe ser por el KDiff3 camino.

Medio ambiente

  • OS: Windows 10
  • Git 2.6.1.Windows.1
  • KDiff3 0.9.98 (64 bit)

Preguntas:

  • ¿Qué tengo que configurar en el .archivo gitconfig para el comando $ git mergetool para abrir la GUI de KDiff3 con las versiones LOCALES, REMOTO, BASE y FUSIONADO de archivo en conflicto?

  • Cómo configurarlo para usarlo tiene ¿diff-tool?

Author: Joseph, 2015-10-23

4 answers

Estos sitios son muy útiles, casi, mergetool y difftool. He utilizado la configuración global, pero puede ser utilizado por el repositorio sin problemas. Solo necesita ejecutar los siguientes comandos:

git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add mergetool.kdiff3.trustExitCode false

git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add difftool.kdiff3.trustExitCode false

El uso de la trustExitCode la opción depende de lo que quieras hacer cuando la herramienta diff regrese. De documentación :

git-difftool invoca una herramienta de diferencias individualmente en cada archivo. Los errores reportados por la herramienta diff son ignorados predeterminada. Use trust trust-exit-code para hacer que git-difftool salga cuando una herramienta de diferencias invocada devuelve un código de salida distinto de cero.

 260
Author: Joseph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-09 00:12:23

Solo para extender la respuesta de @Joseph:

Después de aplicar estos comandos, su archivo global .gitconfig tendrá las siguientes líneas (para acelerar el proceso, simplemente puede copiarlos en el archivo):

[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false
[diff]
    guitool = kdiff3
[difftool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false
 38
Author: Igor Kustov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:33:27

Bueno, el problema es que Git no puede encontrar KDiff3 en la RUTA%%.

En una instalación típica de Unix, todos los ejecutables residen en varias ubicaciones conocidas(/bin/, /usr/bin/, /usr/local/bin/, etc.), y uno puede invocar un programa simplemente escribiendo su nombre en un procesador shell (por ejemplo, cmd.exe:)).

En Microsoft Windows, los programas generalmente se instalan en rutas dedicadas, por lo que no puede simplemente escribir kdiff3 en una sesión cmd y ejecutar KDiff3.

La solución difícil: debes decirle a Git dónde encontrar KDiff3 especificando la ruta completa a kdiff3.exe. Desafortunadamente, a Git no le gustan los espacios en la especificación de ruta en su configuración, por lo que la última vez que lo necesité, terminé con esos antiguos". C:\Progra~1...\kdiff3.exe " como si fuera a finales de la década de 1990:)

La solución simple: Edite la configuración de su equipo e incluya el directorio con kdiff3.exe en % PATH%. Luego pruebe si puede invocarlo desde cmd.exe por su nombre y luego ejecutar Git.

 7
Author: user3159253,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-21 10:50:51

Necesitaba agregar los parámetros de la línea de comandos o KDiff3 solo se abriría sin archivos y me preguntaría por base, local y remoto. Usé la versión suministrada con TortoiseHg .

Además, necesitaba recurrir a los buenos nombres de archivo de DOS 8.3.

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED

Sin embargo, ahora funciona correctamente.

 1
Author: martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-21 10:52:34