What business is it of whatever VCS I'm using to worry about what I put in my files? I don't get what the point here is. Is git version control or syntax checker?
Git doesn't care at all. The example pre-commit hook does a whitespace check as a demonstration of how to write a hook, but it's not enabled by default; you have to make it executable for it to do anything.
As hobbs wrote, the sample pre-commit hook may be doing a check for trailing whitespace. To disable it, look in .git/hooks
and make sure the files there are not executable.
One possible way that the hooks may have gotten enabled is that the executable bit may have gotten set if you were moving your repo around on a FAT-formatted flash drive.
Why? Because trailing whitespace is easily lost, leading to spurious changes and to not applied patches (because of whitespace change). It is a matter of conforming to programming style.
That said it is a question of pre-commit
hook: you can edit it, or disable it, or configure trailing whitespace (perhaps for some kinds of files only) to be not considered an error.
The pre-commit
hook should be disabled by default, but older versions (pre 1.6.0) used to install them turned off by having executable permissions turned off, which might not work on non-UNIX filesystems like FAT; from 1.6.0 they are installed turned off (disabled) by having '.sample' suffix appended.
It is because one of the very common uses for Git is sending patch series via email. Trailing spaces cause trouble in email, and are thus usually stripped out, which means any trailing spaces will be lost in the process of sending the patch via email and applying it. This in turn means that if there are trailing spaces on lines in the repo, but not in the patch being applied, you may get spurious conflicts, or extra changes that weren't intended, when applying a patch.
This pre-commit hook used to be enabled by default, but is no longer. It seems I have misremembered; it was never deliberately enabled by default. As others have pointed out, this has always been a sample pre-commit hook; it used to be disabled by not giving it the execute bit, but that's something that can get screwed up fairly easily (for instance, running under Cygwin on Windows), so in newer versions of Git (since over a year ago) the samples have been disabled by being named pre-commit.sample
. You can delete or move your .git/hooks/pre-commit
to prevent this hook from executing if you don't like the behavior. You should also update your Git to something more recent, as this has been fixed for quite a while.