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