В Mercurial можно определить шаблон для внешних инструментов сравнения и слияния (чтобы они вызывались только для файлов, соответствующих указанному шаблону):
[diff-patterns]
**.ext = difftool
[merge-patterns]
**.ext = mergetool
Как определить такие шаблоны в Git?
В разделе [mergetool] в git-config (1) не упоминается ни шаблон, ни маска, ни что-либо подобное.
EDIT
Вот соответствующая часть моего .git / config:
[diff]
tool = difftool
[difftool "difftool"]
cmd = difftool.git.sh "$LOCAL" "$REMOTE" "$BASE"
[merge]
tool = mergetool
[mergetool "mergetool"]
cmd = mergetool.git.sh "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
Теперь это работает для всех файлов.
Я хочу, чтобы мои difftool и mergetool назывались only для файлов с именами, заканчивающимися .ext
EDIT
Я добавил файл .git / info / attribute со следующим содержимым:
*.ext diff=difftool
*.ext merge=mergetool
Я также добавил
[diff "difftool"]
name = my custom diff driver
driver = difftool.git.sh %A %B %O
[merge "mergetool"]
name = my custom merge driver
driver = mergetool.git.sh %A %B %O %A
в мой .git / config.
Теперь я бегу
git difftool
Он вызывает KDiff3 вместо моего difftool. Что я делаю не так?
Примечание: Я играю с difftool вместо mergetool, потому что его проще тестировать, и я считаю, что если мне удастся настроить difftool, для меня будет очевидно, как настроить mergetool.
EDIT
Difftool теперь работает.
.git / конфигурация:
[diff "difftool"]
command = difftool.git.sh
.git / Информация / атрибуты:
.ext diff=difftool
difftool.git.sh (в PATH)
#!/bin/sh
difftool.jar "$2" "$5"
Но в Windows есть побочный эффект: git diff
теперь приводит к APPCRASH.
EDIT
Я понял, как избежать сбоя или зависания git diff
: нужно использовать git difftool
или позвонить с git diff
через sh
: sh -c "git diff"