Skip to content

Instantly share code, notes, and snippets.

@mxgrn
Created November 5, 2010 10:24
Show Gist options
  • Save mxgrn/663933 to your computer and use it in GitHub Desktop.
Save mxgrn/663933 to your computer and use it in GitHub Desktop.
Git's pre-commit hook to remove trailing whitespaces/tabs
#!/bin/sh
#
# This will abort "git commit" and remove the trailing whitespaces from the files to be committed.
# Simply repeating the last "git commit" command will do the commit then.
#
# Put this into .git/hooks/pre-commit, and chmod +x it.
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
if test "$(git diff-index --check --cached $against --)"
then
echo "COMMIT ABORTED! Removing trailing whitespaces..."
for FILE in `git diff-index --check --cached $against -- | sed '/^[+-]/d' | cut -d: -f1 | uniq`; do echo "* $FILE" ; sed -i "" 's/ *$//' "$FILE" ; done
echo "Done! Run git commit once again."
exit 1
fi
@mayatron
Copy link

mayatron commented Feb 1, 2013

Ironically this file has trailing whitespace on line 14. :) Thanks though, this is super useful.

@Zearin
Copy link

Zearin commented May 12, 2013

Ironically this file has trailing whitespace on line 14. :) Thanks though, this is super useful.

LOL!

Hilarious. Thanks for the laugh. :)

@magnumripper
Copy link

In its current form it only fixes trailing spaces, not other whitespace (ie. tabs). Also, simply repeating the last "git commit" command will not suffice - you'd need to stage the whitespace changes first. Some other similar example scripts actually do a "git add $FILE" within that loop but that has NASTY side effects so that is much worse. Not sure how that can be worked around safely.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment