Git Diff и Meld в Windows

Кто-нибудь когда-либо делал Meld работать с Git на Windows? Я пытаюсь заставить его работать, и у меня нет успеха.

У меня установлен meld, и когда я вызываю его из командной строки с двумя файлами в качестве параметров, он отлично их отличает, поэтому meld установлен правильно. Однако я не могу заставить его работать с Git (Git Diff). Я использую версию git version 1.8.1.msysgit.1 of Git.

Я пробовал несколько вещей: Я создал оболочку script meld.sh:

#!/bin/bash
meld.exe "$2" "$5"
echo $2
echo $5

и использовал его из git:

[diff]
    tool = meld

[difftool "meld"]
    cmd = \"D:\\meld.sh\"

Я попытался добавить его как diffftool, как это:

[diff]
    tool = meld

[difftool "meld"]
    cmd = \"C:\\Program Files (x86)\\Meld\\meld\\meld.exe\" 

или вот так:

[diff]
    tool = meld

[difftool "meld"]
    cmd = '\"/c/Program Files (x86)/Meld/meld/meld.exe\" $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED'

Но это действительно не работает. Я также попытался повторить второй ($ 2) и пятый ($ 5) параметр из моей оболочки script и без вывода. Я также попытался использовать пакет script несколькими способами:

meld.exe %2 %5

или

meld.exe %~2 %~5

но он действительно не работает... Кто-нибудь знает, как я могу передать две версии файла Git, если он отличается от Meld? Это довольно раздражает...

Ответ 1

Обычно вы можете найти пример в Windows, подобный этот смысл, при этом meld.exe находится в вашем PATH)

git config --global merge.tool meld
git config --global mergetool.meld.cmd 'meld.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'

git config --global diff.tool meld
git config --global difftool.meld.cmd 'meld.exe \"$LOCAL\" \"$REMOTE\"'

Вы можете найти более надежные настройки в Git mergetool с Meld в Windows", но идея остается той же.


Отчет OP в комментариях:

Для difftool ваши команды записывают следующие конфигурации в .gitconfig:

[diff] 
  tool = meld 
[difftool "meld"] 
  cmd = meld.exe \\\"$LOCAL\\\" \\\"$REMOTE\\\" 

Я изменил их на:

[diff] 
  tool = meld 
[difftool "meld"] 
  cmd = meld.exe $LOCAL $REMOTE 

и все сработало нормально.

Ответ 2

Или даже лучше, если ваша система блокировки, где обманывать путь не допускается или вы просто не хотите загрязнять пространство вашего пути, вы можете просто поместить полный путь в команду. Я также предпочитаю, чтобы моя текущая копия рабочего кода отображалась слева, поэтому я поменял аргументы $REMOTE и $LOCAL. Также обратите внимание на преобразования\to/и не для того, чтобы избежать двойных кавычек.

[diff]
    tool = meld
[difftool "meld"]
    cmd = \"C:/Program Files (x86)/Meld/meld/meld.exe\" $REMOTE $LOCAL

Ответ 3

Я попробовал несколько вариантов попыток установить путь с помощью git config безрезультатно. Поскольку я хочу использовать meld из окна консоли git bash, что нужно сделать, чтобы экспортировать путь в каталог Meld, перезапустите оболочку bash, а lo и behold git difftool --tool-help и git mergetool --tool-help теперь распознают meld и я могу выбрать его в качестве своего предпочтительного инструмента.

.profile

export PATH=/c/Program\ Files\ \(x86\)/Meld/:$PATH

.gitconfig

[merge]
    tool = meld
[diff]
    tool = meld

Ответ 4

Для Windows 7 (или даже других версий Windows) добавьте эти строки в файл .gitconfig.

[Diff]

tool = meld

[слияние]

tool = meld

[difftool "meld" ]

path = C:/Program Files (x86)/Meld/meld/meld.exe

[mergetool "meld" ]

path = C:/Program Files (x86)/Meld/meld/meld.exe

Обратите внимание, что нет необходимости иметь путь "" для пути, даже если в нем есть место, просто чтобы не забывать использовать передние слайсы вместо обратного.