tool mac for git git-merge kdiff3 mergetool

git - mac - meld in windows



Git: Cómo configurar KDiff3 como herramienta de fusión y herramienta de diferencias (7)

Para usuarios de Mac

Aquí está la respuesta aceptada de @ Joseph, pero con la ubicación de ruta de instalación de Mac predeterminada de kdiff3

(Tenga en cuenta que puede copiar y pegar esto y ejecutarlo de una vez)

git config --global --add merge.tool kdiff3 git config --global --add mergetool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3" git config --global --add mergetool.kdiff3.trustExitCode false git config --global --add diff.guitool kdiff3 git config --global --add difftool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3" git config --global --add difftool.kdiff3.trustExitCode false

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

Cuando hago una fusión y tengo conflictos, ejecuto 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 camino KDiff3.

Ambiente

  • SO: Windows 10
  • Git 2.6.1.windows.1
  • KDiff3 0.9.98 (64 bits)

Preguntas:

  • ¿Qué debo configurar en el archivo .gitconfig para el comando $ git mergetool para abrir la GUI de KDiff3 con las versiones LOCAL , REMOTE , BASE y MERGED del archivo en conflicto?

  • ¿Cómo configurarlo para usarlo tiene la herramienta diff?


(Al intentar descubrir cómo usar kdiff3 de WSL git, terminé aquí y obtuve las piezas finales, así que publicaré mi solución para cualquier otra persona que también tropiece aquí mientras trato de encontrar esa respuesta)

Cómo usar kdiff3 como herramienta diff / merge para WSL git

Pasos para usar kdiff3 instalado en Windows 10 como herramienta diff / merge para git en WSL:

  1. Agregue el directorio de instalación de kdiff3 a la ruta de Windows.
  2. Agregue TMP a la variable de entorno Windows WSLENV (WSLENV = TMP / up). El directorio TMP será utilizado por git para archivos temporales, como revisiones anteriores de archivos, por lo que la ruta debe estar en el sistema de archivos de Windows para que esto funcione.
  3. Establezca TMPDIR en TMP en .bashrc:

# If TMP is passed via WSLENV then use it as TMPDIR [[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP

  1. Convierta unix-path a windows-path cuando llame a kdiff3. Muestra de mi .gitconfig:

[merge] renormalize = true guitool = kdiff3 [diff] tool = kdiff3 [difftool] prompt = false [difftool "kdiff3"] #path = kdiff3.exe # Unix style paths must be converted to windows path style by changing ''/mnt/c/'' or ''/c/'' to ''c:/'' cmd = kdiff3.exe /"`echo $LOCAL | sed ''s_^//(/mnt//)//?///([a-z]//)/_//2:/_''`/" /"`echo $REMOTE | sed ''s_^//(/mnt//)//?///([a-z]//)/_//2:/_''`/" trustExitCode = false [mergetool] keepBackup = false prompt = false [mergetool "kdiff3"] path = kdiff3.exe trustExitCode = false


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

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 de 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 de cmd y ejecutar KDiff3.

La solución difícil: debe 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 tarde 1990s :)

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


Estos sitios fueron muy útiles, casi, mergetool y difftool . Utilicé la configuración global, pero el repositorio puede usarla 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 opción trustExitCode depende de lo que desee hacer cuando regrese la herramienta diff. De la difftool :

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


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

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

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

Sin embargo, funciona correctamente ahora.


Para enmendar la answer , comenzando con Git 2.20 (Q4 2018), el comando adecuado para git mergetool será

git config --global merge.guitool kdiff3

Esto se debe a que " git mergetool " aprendió a tomar la opción " --[no-]gui ", al igual que " git difftool ".

Ver commit c217b93 , commit 57ba181 , commit 063f2bd (24 oct 2018) por Denton Liu ( Denton-L ) .
(Fusionada por Junio ​​C Hamano - gitster - en commit 87c15d1 , 30 oct 2018)

mergetool : accept -g/--[no-]gui como argumentos

En línea con la forma en que difftool acepta una opción -g/--[no-]gui , haga que mergetool acepte la misma opción para usar la variable merge.guitool para encontrar la mergetool predeterminada en lugar de merge.tool .


Solo para extender la respuesta de @ Joseph :

Después de aplicar estos comandos, su archivo .gitconfig global tendrá las siguientes líneas (para acelerar el proceso, simplemente puede copiarlas 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