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

В Mercurial можно определить шаблон для внешних инструментов сравнения и слияния (чтобы они вызывались только для файлов, соответствующих указанному шаблону):

[diff-patterns]
**.ext = difftool
[merge-patterns]
**.ext = mergetool

Как определить такие шаблоны в Git?

В разделе [mergetool] в git-config(1) не упоминается ни шаблон, ни маска, ни что-либо подобное.

РЕДАКТИРОВАТЬ:

Вот соответствующая часть моего.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 вызывались только для файлов с именами, заканчивающимися на .ext

РЕДАКТИРОВАТЬ:

Я добавил файл.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.

РЕДАКТИРОВАТЬ:

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.

РЕДАКТИРОВАТЬ:

Я понял, как избежать падения или зависания git diff: нужно использовать git difftool или позвоните по телефону git diff через sh: sh -c "git diff"

1 ответ

Решение

Вы бы использовали драйвер слияния в gitattributes файл

Смотрите, например, " Как мне сказать git всегда выбирать мою локальную версию для конфликтующих слияний в конкретном файле?"

*.ext merge=mymergetool

Вы можете использовать шаблоны в файле gitattributes.

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