git pre-push hook详解程序员

This article introduces git pre-push hook.

Problem

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.

  • Create <PROJECT_ROOT>/.git/hooks/pre-push file 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.

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/2742.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论