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

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

Я не забочусь о других выключателях, пока git diff можете показать мне регистр без учета регистра

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

4 ответа

Решение

Решение заключается в использовании 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>

Например.

git difftool -t idiff HEAD~1 -- my_schema.sql

поскольку git difftool подсказки (для да / нет) каждый раз перед вызовом инструмента, либо используйте -y переключиться на difftool или добавьте эту опцию конфигурации, чтобы избежать запроса:

git config --global difftool.prompt 0

Чтобы подробнее рассказать об ответе Гурджита Сингха и комментариях caw colordiff, в Windows я сделал следующее, чтобы связать все это вместе:

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

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

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

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

  5. (cmd.exe) Создайте сценарий bash (например, ~/bin/colordiffless.bash), который передает любые аргументы в colordiff.pl (colordiff принимает параметры diff и передает их автоматически) и передает через less(1). Цветовые коды, выводимые colordiff, - это ANSI, который cmd.exe не поймет, но меньше поймет. Вы также восстанавливаете поведение пейджера Git таким образом (при необходимости настраивайте переменную среды LESS).

    #!/bin/bash
    colordiff.pl "$@" | less
    
  6. Настройте псевдоним, как это делал Gurjeet, за исключением того, что вместо вызова diff напрямую вызывайте ваш bash-скрипт. Вывод цветовых кодов - ANSI, поэтому вам нужно что-то для их преобразования. Я знаю, что MSYS less(1) сделает именно это, и вы также сохраните пейджинговое поведение 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 и вместо этого направить весь вывод.

Чтобы сравнить два коммита Git независимо от случая, я создаю архивные файлы и сравниваю содержимое файлов с помощью внешнего инструмента — в данном случае WinMerge (Portable):

      git archive 991f70fe --format=zip > Archive/arcL.zip
git archive cffd466a --format=zip > Archive/arcR.zip
WinMergePortable.exe /ignorecase /ignoreeol /m Full Archive/arcL.zip Archive/arcR.zip

или же

      git archive master --format=zip > Archive/arcL.zip
git archive master --format=zip --remote=ssh://user@192.168.1.2/volume1/git/Tools20 > Archive/arcR.zip
WinMergePortable.exe /ignorecase /ignoreeol /m Full Archive/arcL.zip Archive/arcR.zip 

Последняя команда открывает графический интерфейс, который показывает различия.

Немного исправлено - не нужно иметь бесполезные цвета в патче:

      git config --global difftool.idiff.cmd 'diff --unified=3 --color=never --ignore-case $LOCAL $REMOTE | less --raw-control-chars'
git config --global difftool.prompt 0
git config --global alias.idiff 'difftool --tool idiff'

И тогда должно быть возможно создать хороший HTML, например,

Другие вопросы по тегам