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:
- Agregue el directorio de instalación de kdiff3 a la ruta de Windows.
- 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.
- Establezca TMPDIR en TMP en .bashrc:
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
- 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 argumentosEn línea con la forma en que
difftool
acepta una opción-g/--[no-]gui
, haga quemergetool
acepte la misma opción para usar la variablemerge.guitool
para encontrar la mergetool predeterminada en lugar demerge.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