git hooks

Githooks easily makes our team's code more robust, example below will records some situations of usage.

standard commit msg

filepath to edit: '.git/hooks/commit-msg'

#!/bin/bash
test "" != "$(grep '[A-Z0-9]\+-[0-9]\+ ' "$1")" || {
        echo >&2 "ERROR: Commit message 的格式为: JIRA任务编号 任务名称"
        exit 1
}

prevent conflicts to be commited

filepath to edit: '.git/hooks/pre-commit'

#!/bin/bash
emsg=$(git diff --check --cached)
if git diff --check --cached | grep -qE 'conflict\smarker';then
    echo -e "请检查有未解决冲突的代码进行提交:\n${emsg}"
    exit 1
fi

using script

as git hook file would not keep track on by git history, you cannot share them between your team members. therefore, I prepared a shell script to do it just by adding this script file into your repository root, and then this file can be shared.

#!/bin/bash
echo "start to create git hooks"

fileCommitMsg=.git/hooks/commit-msg
touch $fileCommitMsg
echo "#!/bin/bash" >$fileCommitMsg
echo "test \"\" != \"\$(grep '[A-Z0-9]\\+-[0-9]\\+ ' \"\$1\")\" || {" >>$fileCommitMsg
echo "    echo >&2 \"ERROR: Commit message 的格式为: JIRA任务编号 任务名称\"" >>$fileCommitMsg 
echo "    exit 1" >>$fileCommitMsg
echo "}" >> $fileCommitMsg
chmod +x $fileCommitMsg
echo "finish commit-msg hook"

filePreCommit=.git/hooks/pre-commit
touch $filePreCommit
echo "#!/bin/bash" >$filePreCommit
echo "emsg=\$(git diff --check --cached)" >>$filePreCommit
echo "if git diff --check --cached | grep -qE 'conflict marker'; then" >>$filePreCommit
echo "   echo -e \"请检查有未解决冲突的代码进行提交:\\n\${emsg}\"" >>$filePreCommit
echo "   exit 1" >>$filePreCommit
echo "fi" >>$filePreCommit
chmod +x $filePreCommit
echo "finish pre-commit hook"

exit 1

to be continue