This article introduces git pre-push hook.
In Lean project, we use a modified version of Google’s C++ style checker. I want to automatically run the checker over the changed files before I push commits to git repositories. This is useful because it prevents me from accidentally pushing the commits which contain style problems.
Solution: git pre-push hook
Since git 1.8.2, git introduced pre-push hook which is executed before actual push operation is performed. The following two steps solve the problem.
<PROJECT_ROOT>/.git/hooks/pre-pushfile with the following contents:
#!/usr/bin/env bash IFS=' ' DIR="$( cd "$( dirname "$0" )" && pwd )" CHECKER=$DIR/../../src/cmake/Modules/cpplint.py while read local_ref local_sha remote_ref remote_sha; do CHANGED_FILES=`git diff --name-only $local_sha $remote_sha | grep '/(cpp/|h/)$'` if [ ! -z "$CHANGED_FILES" -a "$CHANGED_FILES" != " " ]; then echo $CHANGED_FILES | xargs $CHECKER RET=$? if [ $RET -ne 0 ]; then echo "There is error(s) from style-check. Please fix them before push to the repo." exit $RET fi fi done exit 0
- Give “exec” permission to the file
chmod +x <PROJECT_ROOT>/.git/hooks/pre-push
Note that you need to change
CHECKER variable if you want to use other checkers.