学习积累

git hook commit-msg

    今天公司遇见一个需求,就是所有人提交的时候都需要在注释后面加一个特殊标记,但是很多人都会忘记,所以就需要用到git hook的commit-msg功能。在网上一番搜罗后,自己写了一个shell脚本给大家使用,具体代码如下:

shell脚本如下:

#!/bin/sh
#coding=utf8
#author=wangchuan@camera360.com

WORK_DIR=$1
DEPTH=${2:-2}
if [ ! $WORK_DIR ] ;then
echo 'Please input the work dir, see examplte: ./git_hook.sh /home/worker/data/www 2'
echo 'If your root dir is very depth, please use larger number, etc: ./git_hook.sh /home/worker/data/www 4'
exit 1
fi

function createGlobalHook(){
    HOOK_DIR="$1/.git_template/hooks"
    if [ ! -x $HOOK_DIR ];then
        mkdir -p $HOOK_DIR
    fi
    COMMIT_MSG="$HOOK_DIR/commit-msg"
    HOOK_STRING='#!/bin/sh\n\nINPUT_FILE=$1\nMESSAGE=`head -n1 $1`\nPATTERN="PLATFORM-[0-9]{1,}$"\nif ! [[ $MESSAGE =~ $PATTERN ]];then\n    echo "Bad commit message, see example: fixed t
he bug PLATFORM-123"\n    exit 1\nfi\n'
    echo -e $HOOK_STRING > $COMMIT_MSG
    chmod +x $COMMIT_MSG
}


function initGitHook(){
    git config --global init.templatedir "$1/.git_template"
    for FILE in `find "$WORK_DIR"  -mindepth 1 -maxdepth $2 -name '.git' | grep -v 'vendor'`
    do
        GIT_DIR=${FILE//.git/}
        echo $GIT_DIR
        COMMIT_MSG=$GIT_DIR"/.git/hooks/commit-msg"
        if [ -a "$COMMIT_MSG" ];then
            mv $COMMIT_MSG $COMMIT_MSG"-backup"
        fi
        #cd the dir, and git init
        cd $GIT_DIR
        git init --template "$1/.git_template"
    done


}
echo "Start to create global git hook: "
createGlobalHook $WORK_DIR
echo "Global git hook created done. "

echo "Start to git init: ";
initGitHook $WORK_DIR $DEPTH
echo "End to git init. "

Be the First to comment.

Leave a Comment