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/attributes со следующим содержимым:

*.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 (в ПУТИ)

#!/bin/sh
difftool.jar "$2" "$5"

Но в Windows есть побочный эффект: git diff теперь приводит к APPCRASH.

ИЗМЕНИТЬ:

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


person utapyngo    schedule 13.09.2011    source источник


Ответы (1)


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

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

*.ext merge=mymergetool

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

person VonC    schedule 13.09.2011
comment
То же самое относится к драйверу diff? Не удалось заставить его работать. Мне очень нужен простой образец. - person utapyngo; 13.09.2011