Git Diff и Meld на Windows
Кто-нибудь когда-либо делал Meld
работать с Git
на Windows
? Я пытаюсь заставить это работать, и у меня нет успеха.
Я установил meld, и когда я вызываю его из командной строки с двумя файлами в качестве параметров, он хорошо их различает, поэтому meld устанавливается правильно. Однако я не могу заставить его работать с Git
(Git Diff
). Я использую версию git version 1.8.1.msysgit.1
из Git
,
Я пробовал несколько вещей: я создал сценарий оболочки meld.sh
:
#!/bin/bash
meld.exe "$2" "$5"
echo $2
echo $5
и использовал его из git:
[diff]
tool = meld
[difftool "meld"]
cmd = \"D:\\meld.sh\"
Я попытался добавить это как difftool, как это:
[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) параметр из моего сценария оболочки, но ничего не выводил. Я также попытался использовать пакетный скрипт несколькими способами:
meld.exe %2 %5
или же
meld.exe %~2 %~5
но это действительно не работает... Кто-нибудь знает, как я могу передать две версии файла Git
использует при переходе на Meld
? Это довольно раздражает...
5 ответов
Обычно вы можете найти пример в 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 with Meld на Windows", но идея остается той же.
ОП сообщает в комментариях:
Для
difftool
Ваши команды записывают следующие конфигурации в.gitconfig
:
[diff]
tool = meld
[difftool "meld"]
cmd = meld.exe \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Я изменил их на:
[diff]
tool = meld
[difftool "meld"]
cmd = meld.exe $LOCAL $REMOTE
и все работало нормально.
Или даже лучше, если ваша система заблокирована, где дурачиться с путем не разрешено, или вы просто не хотите загрязнять пространство своего пути, вы можете просто поставить полный путь к соединению. Я также предпочитаю, чтобы моя текущая рабочая копия кода отображалась слева, поэтому я поменял местами аргументы $REMOTE и $LOCAL. Также учитывайте преобразования \ в / и не избегайте двойных кавычек.
[diff]
tool = meld
[difftool "meld"]
cmd = \"C:/Program Files (x86)/Meld/meld/meld.exe\" $REMOTE $LOCAL
Для Windows 7 (или даже других версий Windows) добавьте эти строки в .gitconfig
файл.
[diff]
tool = meld
[merge]
tool = meld
[difftool "meld"]
path = C:/Program Files (x86)/Meld/meld/meld.exe
[mergetool "meld"]
path = C:/Program Files (x86)/Meld/meld/meld.exe
Обратите внимание, что нет необходимости использовать "
для пути, даже если он включает пробелы. Просто не забудьте использовать прямые, а не обратные.
Я попытался несколько вариантов, пытаясь установить путь с git config
но безрезультатно. Поскольку я хочу использовать meld из окна консоли git bash, то, что сработало, это экспортировать путь в каталог Meld, перезапустить оболочку bash и выполнить команду lo & behold git difftool --tool-help
а также git mergetool --tool-help
Теперь распознайте смесь, и я могу выбрать ее в качестве своего предпочтительного инструмента.
.профиль
export PATH=/c/Program\ Files\ \(x86\)/Meld/:$PATH
.gitconfig
[merge]
tool = meld
[diff]
tool = meld
Еще один совет для пользователей, вызывающих diff из gitk (щелкнув правой кнопкой мыши пункт контекстного меню "External Diff"):
вышеуказанные настройки могут быть переопределены настройками gitk, в этом случае измените инструменты в настройках gitk "Правка"->" Настройки "->"Общие"->"Внешняя разница".