Как выполнить регистрацию без учета регистра в 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 я сделал следующее, чтобы связать все это вместе:
При необходимости установите дистрибутив Strawberry Perl для Windows. Любой дистрибутив Windows Perl должен работать, но Strawberry Perl является свободным программным обеспечением с открытым исходным кодом и поставляется с батарейками. Будьте внимательны с результатом веб-сайта, потому что есть сайт NSFW с аналогичным доменом IIRC. Используйте Google вместо того, чтобы гадать.
Установите MinGW/MSYS. Git для Windows уже поставляется со сборкой MSYS, так что вы можете просто использовать ее make(1), но ваш пробег может отличаться.
Скачайте и установите скрипт Perl colordiff. Я отредактировал Makefile, чтобы изменить место установки на ~/bin и ~/etc (где ~ is %USERPROFILE%), потому что ~/bin уже находится в моем PATH. Отрегулируйте по мере необходимости.
(cmd.exe) Отредактируйте переменные среды реестра (меню "Пуск" для поиска переменных среды) и добавьте.PL в PATHEXT (и все, что вы использовали в PATH, если это необходимо).
(cmd.exe) Создайте сценарий bash (например, ~/bin/colordiffless.bash), который передает любые аргументы в colordiff.pl (colordiff принимает параметры diff и передает их автоматически) и передает через less(1). Цветовые коды, выводимые colordiff, - это ANSI, который cmd.exe не поймет, но меньше поймет. Вы также восстанавливаете поведение пейджера Git таким образом (при необходимости настраивайте переменную среды LESS).
#!/bin/bash colordiff.pl "$@" | less
Настройте псевдоним, как это делал Gurjeet, за исключением того, что вместо вызова diff напрямую вызывайте ваш bash-скрипт. Вывод цветовых кодов - ANSI, поэтому вам нужно что-то для их преобразования. Я знаю, что MSYS less(1) сделает именно это, и вы также сохраните пейджинговое поведение 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 и вместо этого направить весь вывод.
Чтобы сравнить два коммита 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, например,