Git: настройка шаблонов для difftool и mergetool

В 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"

Теперь она работает для всех файлов.

Я хочу, чтобы мой дифтол и mergetool назывался только для файлов с именами, заканчивающимися на .ext

EDIT:

Я добавил файл .git/info/атрибуты со следующим содержимым:

*.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:

[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"

Теперь он работает для всех .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"

Теперь он работает для всех .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"

.

Теперь я запускаю

git difftool

Он вызывает KDiff3, а не мой дифтоинструмент. Что я делаю не так?

Примечание: Я играю с difftool вместо mergetool, потому что его проще тестировать, и я верю, что если мне удастся настроить difftool, то для меня будет очевидно, как настроить mergetool.

EDIT:

Дифтул теперь работает.

.git/config:

[diff "difftool"]
    command = difftool.git.sh

.git/info/attributes:

.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"

6
задан utapyngo 29 March 2013 в 10:18
поделиться