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
Обратите внимание, что нет необходимости иметь путь "" для пути, даже если в нем есть место, просто чтобы не забывать использовать передние слайсы вместо обратного.