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 "Правка"->" Настройки "->"Общие"->"Внешняя разница".

Другие вопросы по тегам