git whitespace woes

Git1.6.0.4 seems a bit old, especially if you consider that:

  • in 1.6.3.4, "git apply --whitespace=fix" did not fix trailing whitespace on an incomplete line
  • in 1.6.3.2, "whitespace" attribute that is set was meant to detect all errors known to git, but it told git to ignore trailing carriage-returns.

Could you try with Git1.6.4.1, and rather than setting a global config, set an attribute on the files you want a special whitespace handle, like this patch describes.

In a given directory, create a .gitattributes file.

* -whitespace

which will ignore any 'whitespace' errors.

Now that will not prevent any conflict due to lack of consistency but that may be worth trying.


The patch was a test about:

Only ignore whitespace errors in t/tNNNN-*.sh and the t/tNNNN subdirectories.
Other files (like test libraries) should still be checked.

t/.gitattributes
t[0-9][0-9][0-9][0-9]-*.sh  -whitespace
t[0-9][0-9][0-9][0-9]/*     -whitespace

Note (Git 2.3.2+, Q1 2015, commit 0a80bc9, by Junio C Hamano aka gitster) "git apply --whitespace=fix" is no longer silent:

"git apply --whitespace=fix" fixed whitespace errors in the common context lines but did so without reporting.

When the incoming patch has whitespace errors in a common context line (i.e. a line that is expected to be found and is not modified by the patch), "apply --whitespace=fix" corrects the whitespace errors the line has, in addition to the whitespace error on a line that is updated by the patch.
However, we did not count and report that we fixed whitespace errors on such lines.


If you are going to turn on those settings, you need to schedule a day where ALL source code in your project gets its whitespace uniformly stripped, by running a script, or by saving every file from an editor that will perform the strip on save. Then, all future commits will be policed by the settings, so all should be well going forward.