Git mergetool com Meld no Windows


92

No Linux, minha ferramenta de mesclagem favorita é o Meld, e não tive problemas em usá-la ou configurá-la para funcionar com o Git. No entanto, no Windows, a história é diferente.

Primeiro, instalei o Meld de um pacote que encontrei aqui: https://code.google.com/p/meld-installer/

Então, eu configurei meu .gitconfig assim para suportar Meld como o mergetool padrão

[merge]                                                      
    tool = meld                                                                         

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

Então, quando eu tenho um conflito, git difftool e Meld de fato abre. No entanto, os caminhos para os arquivos que o Git grava para passar para a ferramenta diff estão incorretos. Por exemplo, embora o Git gere os arquivos BASE, LOCAL e REMOTE no diretório do repositório (o local de onde chamei git mergetool), o Meld tenta abrir cada um desses arquivos no diretório do executável.

Em vez de abrir C: \ repo \ roses.txt.LOCAL.2760.txt, o Meld tenta abrir C: \ Arquivos de programas (x86) \ Meld \ meld \ roses.txt.LOCAL.2760.txt.

Alguém já se deparou com isso antes ou sabe como configurar o Git / Meld para funcionar corretamente no Windows?


Não tenho ideia se vale a pena tentar, mas eu uso o KDiff3 e o caminho configurado no meu gitconfig é: path = C: / Arquivos de programas (x86) /KDiff3/kdiff3.exe e não C: \\ etc.
Fumler

1
Você poderia resolver o problema?
Roger

1
Eu não fui capaz. Uma das respostas provavelmente está correta, mas estou hesitante em marcar qualquer uma como tal, pois não consigo fazer com que o Meld se comporte corretamente: - /
Nelson

@Nelson Não se preocupe, eu também não posso :(
abergmeier

Por favor, comente e vote no problema do upstream para que o futuro usuário não precise nem se preocupar com isso.
Franklin Yu

Respostas:


150

Por que você não usa o git bash para Windows?

Após a instalação, basta:

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

Isso é tudo!


Essa solução funcionou para mim. Eu também fiz o comando abaixo para não me avisar toda vez que abrir a ferramenta git config --global mergetool.prompt false
Vineel Kovvuri

1
Esta solução funcionou para mim com o Meld 3.16.2, também adicionou git config --global mergetool.keepBackup false para remover aqueles backups incômodos.
Jay

2
por algum motivo, depois de aplicar essa solução, tudo parecia vermelho (alterado) e eu tive que fazer isso:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
ihadanny

7
Com esta solução, obtenho Cannot import: GTK+e DLL load failed.
Juergen

4
@Juergen A resposta para isso é que há uma incompatibilidade de caminho acontecendo. Se você copiasse libgirepository-1.0-1.dll que está em seu diretório lib um diretório acima (que é o mesmo diretório do Meld.exe) e inicie, você verá que as coisas estão funcionando,
demongolem

26

Schuess, tome cuidado com caracteres de espaço nos diretórios!

[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\"

1
As edições me parecem ter quebrado a solução. A revisão original funciona para mim, então +1. Achei que parece funcionar sem a linha de caminho.
vossad01

Isso funcionou para mim quando eu usei cmdsem pathe backticks em vez de aspas simples, aspas simples em vez de citações de barra-double usado.
sq33G

Com Win10 1903 e WSL, tentei várias dessas abordagens de configuração e o git não conseguiu invocar o meld. Acabei criando um link simbólico Program_Files_x86 -> 'Program Files (x86)/'e usei[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag

10

Eu tive exatamente o mesmo problema e descobri que precisava usar a força bruta para fazê-lo funcionar. Aqui está o que eu coloquei em meu arquivo .gitconfig. (Observe que meu executável meld está em um local diferente)

[merge]
    tool = meld
[mergetool "meld"]
        cmd = "/c/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED"

Exatamente isso funcionou bem para mim, com o caminho de instalação personalizado que escolhi de qualquer maneira. É importante notar que há uma diferença entre "path", que a maioria dos guias usa, e "cmd" que é especificado aqui.
FauxFaux

Tentei as soluções suas e de Martin e nenhuma funcionou. Acho que há outra coisa acontecendo. Uma janela é aberta e fechada imediatamente e o Meld é aberto com os caminhos apontando para o diretório de instalação do Meld em vez do repositório. Um argumento passado para o Meld poderia estar causando sua morte e, em seguida, detectar o problema e reiniciar com o caminho padrão? Estou entendendo aqui, mas não tenho certeza de como resolver isso ...
Nelson

Você tem certeza que está usando o meld.exe e não o arquivo meld que está (eu acho) em uma pasta bin. Lembro-me de ter tido um problema em que usei apenas o arquivo meld e ele inicializou o aplicativo antes que o git tivesse a chance de colocar os arquivos na pasta temporária.
schuess

Eu usei sua solução, mas usando o meldarquivo no bindiretório (na verdade, renomeei o arquivo meld.py) e funcionou sem problemas.
Jarrett de

7

Janelas:

Você pode usar esses dois comandos ( como diz Arugin ) - usando o caminho adequado para Meld.exe:

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

OU você pode simplesmente editar seu C:\Users\YOUR_USER_NAME\.gitconfigarquivo diretamente e adicionar o seguinte ao final dele:

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

Agora chame o git difftoolGit Bash para Windows e o Meld abrirá como seu visualizador de difftool padrão.


Linux:

ATUALIZAÇÃO 20 de setembro de 2019:
- Posso também colocar a versão Linux aqui também para minha própria referência em um só lugar:

Para Linux também é super fácil:

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

Em seguida, adicione ao final do arquivo .gitconfig:

[diff]
    tool = meld

É isso aí! git difftoolagora funciona no Linux Ubuntu!

Relacionado:

  1. Baixe e instale o meld aqui: https://meldmerge.org/
  2. Como faço o Git usar o editor de minha escolha para commits?
  3. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

4

Eu encontrei uma solução em um relatório de bug no instalador do meld, nesta página:

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

Pelo que entendi, o problema é que o programa meld.exe (que executa o meld por meio do interpretador Python) define desnecessariamente o diretório de trabalho do comando como o do meld.exe. Isso faz com que os caminhos relativos sejam interpretados incorretamente quando passados ​​como argumentos de linha de comando.

A solução é substituir o meld.exe fornecido por um gerado pela compilação do arquivo meld.ahk, usando AHK2EXe (script AutoHotKey -> exe). Basta baixar o script mais abaixo na página, já que algumas versões foram postadas lá.


3
O rastreador de problemas não foi configurado para atribuir o problema a mim automaticamente, então não vi comentários. Para googlers que encontrarão isso mais tarde; este problema foi corrigido.
Keegan,

4

Eu também enfrentei um problema semelhante. O sistema operacional usado é o Windows 10 e as seguintes alterações funcionaram para mim. Parece mais um problema de caminho

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

3

Por alguma razão, no Windows 10 a variável de ambiente PATH não pôde ser definida corretamente durante a instalação, então uma estranha exceção é levantada dizendo que não foi possível encontrar alguns .dll que estão em "C: \ Arquivos de Programas (x86) / Diretório Meld / bin ".

Uma solução alternativa para mim foi executar em git bash:

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

Ou adicione ao Windows PATH

C:\Program Files (x86)/Meld/bin

2

Nenhuma das respostas funcionou para mim. Acabei com isso no arquivo .gitconfig:

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

Depois de git merge mybranchencerrar os conflitos, você simplesmente digita git mergetoole a fusão é aberta. Depois de salvar, você deve fazer um commit no git e os conflitos serão resolvidos.

Por algum motivo, isso só funcionou com Meld 3.18.x, Meld 3.20.x me dá um erro.


0

Depois de tentar todas as opções acima, configurar o Meld para ser executado como administrador funcionou para mim.

  1. Clique com o botão direito em Meld.exe
  2. Vá para Propriedades > Compatibilidade e marque a Run this program as an administratorcaixa de seleção

Os erros que recebi arquivos temporários referenciados como c:\windows\temp\meld-*, que não estavam sendo criados. Elevar as permissões do Meld parece funcionar, pois agora funciona com ambos git difftoole é executado manualmente no Meld.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.