Как установить difftool/mergetool для определенного расширения файла в Git?

Можно ли установить собственный инструмент для объединения файлов с определенным расширением в Git?

Спасибо за любые указатели!

Обновить

Я не смог придумать лучшего решения, чем определить собственный difftool и вызвать его вручную, как предложил @jarodeells:

[diff]
    tool = mydiff
[difftool "mydiff"]
    cmd="script.sh \"$LOCAL\" \"$REMOTE\""

Затем вызывая его явно:

$ git difftool -t mydiff someFileWith.ext

person rlegendi    schedule 10.09.2012    source источник
comment
Можете ли вы быть более конкретным о решении? Также я думаю, что в конце строки cmd есть одна дополнительная кавычка.   -  person Halil Kaskavalci    schedule 22.07.2014
comment
На самом деле, после script.sh был дополнительный ", в котором не было необходимости. Теперь должно быть хорошо :-)   -  person rlegendi    schedule 24.07.2014
comment
Я сделал предложенное вами решение, но когда я делаю git difftool --cached, скрипт не ловит вариант и не работает. Вы столкнулись с этой проблемой?   -  person Halil Kaskavalci    schedule 31.07.2014


Ответы (2)


Если это еще не поддерживается, установите сценарий оболочки, который отключает расширение и вызывает правильный инструмент слияния.

person jarodeells    schedule 11.09.2012
comment
Да, это может быть решением, но я бы хотел избежать нестандартных решений. Меня интересует, возможно ли это через gitconfig (как указано в тегах). - person rlegendi; 11.09.2012

Обновление: см. комментарии @Ackdari ниже. Внешний инструмент не обязательно должен быть основан на командной строке. Я не знаю, как git использует binary = True при использовании внешнего инструмента, но подозреваю, что это может понадобиться для работы всех потоков.

Если ваш внешний инструмент сравнения* работает только из командной строки (без графического интерфейса), вы можете использовать для этого встроенный gitattributes:

в .gitconfig добавить:

[diff "my_diff"]
    command = Tools/csv_diff
    binary = true # Not sure this is required.

и в .gitattributes (либо глобально, либо для каждого репозитория, см. здесь ) добавлять:

*.csv diff=my_diff

[*] Команда для внешнего инструмента сравнения будет вызываться git с 7 параметрами, подробно описанными в разделе GIT_EXTERNAL_DIFF в руководстве здесь.

person OmerB    schedule 15.10.2018
comment
Что ж, ваш комментарий на самом деле выбил меня из колеи :-). Git делает некоторое различие между драйвером diff (который определен в разделе diff в .gitconfig) и инструментом сравнения (определен в разделе difftool), и я помню, что читал, что драйвер должен быть текстовым, но я этого не вижу где-нибудь в руководстве сейчас. Так что попробуйте, может получится! если это так, оставьте комментарий, и я обновлю ответ. Еще одна вещь, которую я не знаю, как я пропустил раньше, это возможность добавить binary = true в определение драйвера (прямо под command = Tools/csv_diff). Может быть, это изменение необходимо. - person OmerB; 19.02.2019
comment
Протестировал, и он работает (написал программу, которая просто отображает аргументы cli и с .jpg в виде двоичных файлов), но binary = true мне не нужно. Но мне все еще интересно, почему я не могу изменить способ предоставления аргументов cli, как для merge.<driver>.driver (см. документ) - person Ackdari; 19.02.2019
comment
@Акдари Круто! Мне интересно, что делает git, когда ему нужно показывать текстовые различия и определен инструмент с графическим интерфейсом (например, когда вы выполняете git log -p для нескольких коммитов назад)... - person OmerB; 19.02.2019
comment
в моей настройке git просто показывает Binary files /dev/null and b/bild.jpg differ - person Ackdari; 20.02.2019
comment
Хорошо, это то, что git обычно показывает для двоичных файлов, поэтому я предполагаю, что где-то по пути он обнаружен как двоичный. - person OmerB; 20.02.2019