Подтвердить что ты не робот

Как выполнить регистр без учета регистра в Git

git diff не поддерживает нечувствительное к регистру сравнение файлов. Google показывает очень мало людей, просящих эту функцию, и это тоже только в сочетании с каким-то другим переключателем git diff, например, с -G или с --color-words.

Мне не нужны другие переключатели, пока git diff может показать мне нечувствительный к регистру diff.

Поскольку я не видел никаких конкретных вопросов к этому, и так как я нашел решение через час, исследуя эту проблему, я добавляю этот вопрос и ответ.

4b9b3361

Ответ 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 я сделал следующее, чтобы связать все это вместе:

  1. При необходимости установите дистрибутив Strawberry Perl для Windows. Любой дистрибутив Windows Perl должен работать, но Strawberry Perl является свободным программным обеспечением с открытым исходным кодом и поставляется с батарейками. Будьте внимательны с результатом веб-сайта, потому что есть сайт NSFW с аналогичным доменом IIRC. Используйте Google вместо того, чтобы гадать.

  2. Установите MinGW/MSYS. Git для Windows, уже поставляется с сборкой MSYS, так что вы могли бы просто использовать его make, но ваш пробег может варьироваться.

  3. Загрузите и установите colordiff Perl colordiff. Я отредактировал Makefile, чтобы изменить место установки на ~/bin и ~/etc (где ~ is %USERPROFILE%), потому что ~/bin уже находится в моем PATH. Отрегулируйте по мере необходимости.

  4. (cmd.exe) Отредактируйте переменные среды реестра (меню "Пуск" для поиска переменных среды) и добавьте .PL в PATHEXT (и любой bin/ вы использовали для PATH если это необходимо).

  5. (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
    
  6. Настройте псевдоним, как это делал Gurjeet, за исключением того, что вместо непосредственного вызова diff вызывайте ваш bash-скрипт. Вывод цветовых кодов - ANSI, поэтому вам нужно что-то для их преобразования. Я знаю, что MSYS less сделает именно это, и вы также сохраните пейджинговое поведение Git!

    git config --global difftool.cldiff.cmd "colordiffless.bash -ui $LOCAL $REMOTE"
    

    (из cmd.exe, поэтому двойные кавычки являются литеральными, а $LOCAL и $REMOTE - тоже литеральными)

  7. Наконец, он же difftool команды, так что вы можете ввести единую пользовательскую команду вместо difftool команды:

    git config --global alias.cldiff "difftool -y -t cldiff"
    

редактировать

Я ошибся насчет возвращения пейджера. difftool вызывает команду для каждого файла, поэтому вместо вывода одного пейджера с каждым diff вы получите пейджер для каждого файла. Для того, чтобы решить, что вы, вероятно, хотите, чтобы обернуть difftool -y в сценарии и трубы весь его выход на less вместо этого.