Git: настройка шаблонов для difftool и mergetool - PullRequest
6 голосов
/ 13 сентября 2011

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

1 Ответ

4 голосов
/ 13 сентября 2011

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

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

*.ext merge=mymergetool

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

...