Как выполнить регистр без учета регистра в Git
git diff
не поддерживает нечувствительное к регистру сравнение файлов. Google показывает очень мало людей, просящих эту функцию, и это тоже только в сочетании с каким-то другим переключателем git diff
, например, с -G
или с --color-words
.
Мне не нужны другие переключатели, пока git diff
может показать мне нечувствительный к регистру diff.
Поскольку я не видел никаких конкретных вопросов к этому, и так как я нашел решение через час, исследуя эту проблему, я добавляю этот вопрос и ответ.
Ответы
Ответ 1
Решение состоит в использовании git difftool
. Со следующей командой config я могу добавить пользовательский инструмент diff
под названием idiff
для Git для использования:
git config --global difftool.idiff.cmd 'diff -i $LOCAL $REMOTE'
При такой настройке я вижу сравнение без учета регистра:
git difftool --tool idiff <other diff options> <Git references or files>
Eg.
git difftool -t idiff HEAD~1 -- my_schema.sql
Так как git difftool
запрашивает (для да/нет) каждый раз перед вызовом инструмента, используйте -y
переключатель для difftool
или добавьте этот параметр конфигурации, чтобы избежать подсказки:
git config --global difftool.prompt 0
Ответ 2
Чтобы расширить ответ Гурджита Сингха и комментарий colordiff
, в Windows я сделал следующее, чтобы связать все это вместе:
-
При необходимости установите дистрибутив Strawberry Perl для Windows. Любой дистрибутив Windows Perl должен работать, но Strawberry Perl является свободным программным обеспечением с открытым исходным кодом и поставляется с батарейками. Будьте внимательны с результатом веб-сайта, потому что есть сайт NSFW с аналогичным доменом IIRC. Используйте Google вместо того, чтобы гадать.
-
Установите MinGW/MSYS. Git для Windows, уже поставляется с сборкой MSYS, так что вы могли бы просто использовать его make
, но ваш пробег может варьироваться.
-
Загрузите и установите colordiff
Perl colordiff
. Я отредактировал Makefile, чтобы изменить место установки на ~/bin
и ~/etc
(где ~
is %USERPROFILE%
), потому что ~/bin
уже находится в моем PATH
. Отрегулируйте по мере необходимости.
-
(cmd.exe) Отредактируйте переменные среды реестра (меню "Пуск" для поиска переменных среды) и добавьте .PL
в PATHEXT
(и любой bin/
вы использовали для PATH
если это необходимо).
-
(cmd.exe) Создайте сценарий bash (например, ~/bin/colordiffless.bash
), который передает любые аргументы в colordiff.pl
(colordiff
принимает параметры diff и передает их автоматически) и передает через less
. Цветовые коды, выводимые colordiff
- это ANSI, который cmd.exe не поймет, но less
поймет. Таким способом вы также восстанавливаете поведение пейджера Git (при необходимости настраивайте переменную среды LESS
).
#!/bin/bash
colordiff.pl "[email protected]" | less
-
Настройте псевдоним, как это делал Gurjeet, за исключением того, что вместо непосредственного вызова diff
вызывайте ваш bash-скрипт. Вывод цветовых кодов - ANSI, поэтому вам нужно что-то для их преобразования. Я знаю, что MSYS less
сделает именно это, и вы также сохраните пейджинговое поведение Git!
git config --global difftool.cldiff.cmd "colordiffless.bash -ui $LOCAL $REMOTE"
(из cmd.exe, поэтому двойные кавычки являются литеральными, а $LOCAL
и $REMOTE
- тоже литеральными)
-
Наконец, он же difftool
команды, так что вы можете ввести единую пользовательскую команду вместо difftool
команды:
git config --global alias.cldiff "difftool -y -t cldiff"
редактировать
Я ошибся насчет возвращения пейджера. difftool
вызывает команду для каждого файла, поэтому вместо вывода одного пейджера с каждым diff вы получите пейджер для каждого файла. Для того, чтобы решить, что вы, вероятно, хотите, чтобы обернуть difftool -y
в сценарии и трубы весь его выход на less
вместо этого.