Git mergetool con Meld en Windows

93

En Linux, mi herramienta de combinación favorita es Meld, y no he tenido problemas para usarla o configurarla para que funcione con Git. Sin embargo, en Windows ha sido una historia diferente.

Primero, instalé Meld de un paquete que encontré aquí: https://code.google.com/p/meld-installer/

Luego, configuré mi .gitconfig de esa manera para admitir Meld como la herramienta mergetool predeterminada

[merge]                                                      
    tool = meld                                                                         

[mergetool "meld"]                                           
    path = C:\\Program Files (x86)\\Meld\\meld\\meld.exe
    keepBackup = false                                   
    trustExitCode = false

Entonces, cuando tengo un conflicto, uso git difftool y Meld, de hecho, abre. Sin embargo, las rutas a los archivos que escribe Git para pasar a la herramienta de diferencias son incorrectas. Por ejemplo, aunque Git genera los archivos BASE, LOCAL y REMOTO en el directorio del repositorio (la ubicación desde la que llamé git mergetool), Meld intenta abrir cada uno de esos archivos en el directorio del ejecutable.

En lugar de abrir C: \ repo \ roses.txt.LOCAL.2760.txt, Meld intenta abrir C: \ Archivos de programa (x86) \ Meld \ meld \ roses.txt.LOCAL.2760.txt.

¿Alguien se ha encontrado con esto antes o sabe cómo configurar Git / Meld para que funcione correctamente en Windows?

Nelson
fuente
No tengo idea de si esto tiene algún sentido para ser probado, pero uso KDiff3, y la ruta configurada en mi gitconfig es: ruta = C: / Archivos de programa (x86) /KDiff3/kdiff3.exe y no C: \\ etc.
Fumler
1
¿Podrías resolver el problema?
Roger
1
No he podido. Una de las respuestas probablemente sea correcta, pero dudo en marcar alguna como tal, ya que en realidad no puedo hacer que Meld se comporte correctamente: - /
Nelson
@Nelson No te preocupes, yo tampoco :(
abergmeier
Por favor comente y vote por el problema de upstream para que el futuro usuario ni siquiera tenga que preocuparse por esto.
Franklin Yu

Respuestas:

151

¿Por qué no usas git bash para Windows?

Después de instalar meld simplemente:

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe" <- path to meld here

¡Eso es todo!

Arugin
fuente
Esta solución funcionó para mí.También hice el siguiente comando para no avisarme cada vez que abre la herramienta git config --global mergetool.prompt false
Vineel Kovvuri
1
Esta solución funcionó para mí con Meld 3.16.2, también agregué git config --global mergetool.keepBackup false para eliminar esas molestas copias de seguridad.
Jay
2
por alguna razón, después de aplicar esta solución, todo apareció en rojo (cambiado), y tuve que hacer esto:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
ihadanny
7
Con esta solución, obtengo Cannot import: GTK+y DLL load failed.
Juergen
4
@Juergen La respuesta a esto es que hay un desajuste de ruta. Si tuviera que copiar libgirepository-1.0-1.dll que está en su directorio lib un directorio arriba (que es el mismo directorio que Meld.exe) y comenzar, encontrará que las cosas funcionan,
demongolem
26

Schuess, ¡tenga cuidado con el carácter de espacio en los directorios!

[merge]
    tool = meld
[mergetool "meld"]
    prompt = false
    keepBackup = false
    keepTemporaries = false
    path = C:/Program Files (x86)/Meld/Meld.exe
    cmd = \"/C/Program Files (x86)/Meld/Meld.exe\" \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"--output=$PWD/$MERGED\"
Martin Dušek
fuente
1
Me parece que las ediciones han roto la solución. La revisión original me funciona, así que +1. Encontré que parece funcionar sin la línea de ruta.
vossad01
Esto funcionó para mí cuando usé cmdsin pathy usé comillas inversas en lugar de comillas simples, comillas simples en lugar de comillas dobles.
sq33G
Con Win10 1903 y WSL, probé un montón de estos enfoques de configuración y git no pudo invocar meld. Terminé haciendo enlaces simbólicos Program_Files_x86 -> 'Program Files (x86)/'y usé[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag
10

Tuve exactamente el mismo problema y descubrí que tenía que usar la fuerza bruta para que funcionara. Esto es lo que puse en mi archivo .gitconfig. (Tenga en cuenta que mi ejecutable meld está en una ubicación diferente)

[merge]
    tool = meld
[mergetool "meld"]
        cmd = "/c/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED"
schuess
fuente
Exactamente eso funcionó bien para mí, con la ruta de instalación personalizada que elegí de todos modos. Vale la pena señalar que hay una diferencia entre "ruta", que utilizan la mayoría de las guías, y "cmd", que se especifica aquí.
FauxFaux
Probé las soluciones de usted y de Martin y ninguna funcionó. Creo que está pasando algo más. Se abre una ventana y luego se cierra inmediatamente, y luego Meld se abre con las rutas apuntando al directorio de instalación de Meld en lugar del repositorio. ¿Podría un argumento pasado a Meld estar causando su muerte y luego detecta el problema y se reinicia con la ruta predeterminada? Estoy agarrando aquí, pero no estoy seguro de cómo solucionar este problema ...
Nelson
Estás seguro de que estás usando meld.exe y no el archivo meld que está en (creo) una carpeta bin. Recuerdo haber tenido un problema en el que utilicé simplemente el archivo meld y se inicia la aplicación antes de que git tenga la oportunidad de poner los archivos en la carpeta temporal.
schuess
Usé su solución, pero usando el meldarchivo en el bindirectorio (en realidad cambié el nombre del archivo meld.py) y funcionó sin problemas.
Jarrett
7

Ventanas:

Puede usar estos dos comandos ( como dice Arugin ), usando la ruta adecuada a Meld.exe:

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"

O simplemente puede editar su C:\Users\YOUR_USER_NAME\.gitconfigarchivo directamente y agregar lo siguiente al final:

[merge]
  tool = meld
[mergetool "meld"]
  path = C:\\Program Files (x86)\\Meld\\Meld.exe

Ahora llame git difftoola Git Bash para Windows y Meld se abrirá como su visor de difftool predeterminado.


Linux:

ACTUALIZACIÓN 20 de septiembre de 2019:
- También podría poner la versión de Linux aquí para mi propia referencia en un solo lugar, si nada más:

Para Linux también es muy fácil:

sudo apt update
sudo apt install meld
gedit ~/.gitconfig  # edit your ~/.gitconfig file (gedit GUI editor will open)

Luego agregue al final del archivo .gitconfig:

[diff]
    tool = meld

¡Eso es! git difftoolahora funciona en Linux Ubuntu!

Relacionado:

  1. Descargue e instale meld desde aquí: https://meldmerge.org/
  2. ¿Cómo hago para que Git use el editor de mi elección para las confirmaciones?
  3. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
Gabriel Staples
fuente
4

Encontré una solución en un informe de error en el instalador de meld, en esta página:

https://code.google.com/p/meld-installer/issues/detail?id=11

Hasta donde tengo entendido, el problema es que el programa meld.exe (que ejecuta meld a través del intérprete de Python) establece innecesariamente el directorio de trabajo del comando en el de meld.exe. Esto hace que las rutas relativas se interpreten incorrectamente cuando se pasan como argumentos de línea de comando.

La solución es reemplazar el meld.exe proporcionado por uno generado compilando el archivo meld.ahk, usando AHK2EXe (script AutoHotKey -> exe). Simplemente descargue el script más abajo en la página, ya que se han publicado algunas versiones allí.

star99ers
fuente
3
El rastreador de problemas no se configuró para asignarme el problema automáticamente, por lo que me perdí los comentarios. Para los usuarios de Google que encuentren esto más tarde; El problema ha sido resuelto.
Keegan
4

Yo también enfrenté un problema similar. El sistema operativo utilizado es Windows 10 y los siguientes cambios funcionaron para mí. Parece más como un problema de ruta.

git config --global mergetool.meld.path "/c/Program Files (x86)/Meld/Meld.exe" <- path to meld here
Pravin
fuente
3

Por alguna razón, en Windows 10, la variable de entorno PATH no se pudo configurar correctamente durante la instalación, por lo que se genera una extraña excepción que dice que no puede encontrar algunos .dll que están en "C: \ Archivos de programa (x86) / Directorio Meld / bin ".

Una solución para mí fue ejecutar en git bash:

export PATH=$PATH:"/C/Program Files (x86)/Meld/lib" 

O agregar a Windows PATH

C:\Program Files (x86)/Meld/bin
David L.
fuente
2

Ninguna de las respuestas funcionó para mí. Terminé con esto en el archivo .gitconfig:

[merge]
  tool = meld
[mergetool "meld"]
  cmd = 'C:/Program Files (x86)/Meld/Meld.exe' $LOCAL $BASE $REMOTE --output=$MERGED
[mergetool]
  prompt = false

Después de un git merge mybranchfinal con conflictos, simplemente escribegit mergetool y se abre la combinación. Después de guardar, debe confirmar en git y los conflictos se resuelven.

Por alguna razón, esto solo funcionó con Meld 3.18.x, Meld 3.20.x me da un error.

Jeremy Benks
fuente
0

Después de intentar todo lo anterior, configurar Meld para que se ejecute como administrador funcionó para mí.

  1. Haga clic derecho en Meld.exe
  2. Vaya a Propiedades > Compatibilidad y seleccione la Run this program as an administratorcasilla de verificación

Los errores que recibí se referían a archivos temporales como c:\windows\temp\meld-*, que no se estaban creando. Elevar los permisos de Meld parece funcionar, ya que ahora funciona con ambos git difftooly se ejecuta manualmente dentro de Meld.

Drey
fuente