Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Git pre-commit hook to add a new line at the end of a file and remove trailing whitespaces
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# Usage:
# Remove the .sh file extension when you put the script in your hooks folder!
#
# Purposes:
# Add an empty line at the end of the file.
# Remove trailing spaces at the end of a line.
#
# Source: http://eng.wealthfront.com/2011/03/corrective-action-with-gits-pre-commit.html
# Version: 2011-03-08
# Related: http://stackoverflow.com/questions/13223868/how-to-stage-line-by-line-in-git-gui-although-no-newline-at-end-of-file-warnin
# Files (not deleted) in the index
files=$(git diff-index --name-status --cached HEAD | grep -v ^D | cut -c3-)
if [ "$files" != "" ]
then
for f in $files
do
# Only examine known text files
if [[ "$f" =~ [.](conf|css|erb|html|js|json|log|properties|rb|ru|txt|xml|yml|h|m)$ ]]
then
# Add a linebreak to the file if it doesn't have one
if [ "$(tail -c1 $f)" != '\n' ]
then
echo >> $f
git add $f
fi
# Remove trailing whitespace if it exists
if grep -q "[[:blank:]]$" $f
then
sed -i "" -e $'s/[ \t]*$//g' $f
git add $f
fi
fi
done
fi
@omahlama

I personally added md, sh and scss as known text files. Good stuff otherwise!

@blelump

I came across strange issue on Ubuntu cause it still complained Syntax error: "(" unexpected (expecting "then") whereas the syntax seems to be just fine.

For those who are not familiar with (yet), Ubuntu has dash as default shell and dash does not support regexp comparison so either change /bin/sh to /bin/bash or change condition into if echo "$f" | egrep -q "[.](conf|css|erb|html|js|json|log|properties|rb|ru|txt|xml|yml|h|m)$".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.