问题
git diff does not support a case-insensitive comparison of files. Google shows a very few people asking for that feature, and that too only in combination with some other git diff switch, like with -G or with --color-words.
I don't care for other switches, as long as git diff can show me the case-insensitive diff.
Since I didn't see any specific question towards that, and since I found a solution after an hour researching this problem, I am adding this question and the answer.
回答1:
The solution is to use git difftool. With the following config command, I can add a custom diff tool called idiff for Git to use:
git config --global difftool.idiff.cmd 'diff -i $LOCAL $REMOTE'
With this customization, I can see the case-insensitive comparison like so:
git difftool --tool idiff <other diff options> <Git references or files>
Eg.
git difftool -t idiff HEAD~1 -- my_schema.sql
Since git difftool prompts (for yes/no) every time before invoking the the tool, either use -y switch for difftool or add this config option to avoid the prompt:
git config --global difftool.prompt 0
回答2:
To expand on Gurjeet Singh's answer, and caw's colordiff comment, in Windows I did the following to get it all tied together:
If needed, install Strawberry Perl distribution for Windows. Any Windows Perl distribution should work, but Strawberry Perl is free software/open source and comes with batteries included. Heed caution with the Web site result because there's a NSFW site with a similar domain IIRC. Use Google instead of guessing.
Install MinGW/MSYS. Git for Windows already comes with a build of MSYS so you might be able to just use its
make, but your mileage may vary.Download and install the
colordiffPerl script. I edited the Makefile to change the install location to~/binand~/etc(where~is%USERPROFILE%) because~/binis already in myPATH. Adjust as needed.(cmd.exe) Edit your registry environment variables (search start menu for environment variables) and add
.PLtoPATHEXT(and whateverbin/you used forPATHif necessary).(cmd.exe) Create a bash script (e.g.,
~/bin/colordiffless.bash) that passes any arguments on tocolordiff.pl(colordiffaccepts diff options and passes them on automatically) and pipes throughless. The color codes output bycolordiffare ANSI, which cmd.exe will not understand, butlessdoes. You also restore Git's pager behavior this way (configureLESSenvironment variable if necessary).#!/bin/bash colordiff.pl "$@" | lessSetup the alias as Gurjeet did, except instead of invoking
diffdirectly, invoke your bash script. The color codes output are ANSI so you'll need something to convert them. I happen to know that MSYSlesswill do just that, and you also preserve the pager behavior of Git!git config --global difftool.cldiff.cmd "colordiffless.bash -ui $LOCAL $REMOTE"(from cmd.exe, so the double-quotes are literal and the
$LOCALand$REMOTEare literal text too)Finally, alias the
difftoolcommand so you can type a single, custom command instead of thedifftoolcommand:git config --global alias.cldiff "difftool -y -t cldiff"
Edit
I was mistaken about the pager behavior coming back. difftool invokes the command for each file so instead of getting a single pager output with every diff, you will get a pager for each file. To solve that, you will likely want to wrap difftool -y in a script and pipe its entire output to less instead.
来源:https://stackoverflow.com/questions/17380029/how-to-perform-case-insensitive-diff-in-git