我想在git commit之前检查提交消息。 我使用预提交钩子来做到这一点,但无法在.git / pre-commit脚本中找到获取提交消息的方法。 我怎么能得到它?
答案 0 :(得分:26)
在pre-commit
挂钩中,提交消息通常尚未创建¹。您可能希望使用其中一个prepare-commit-msg
或commit-msg
挂钩。运行这些钩子的顺序有一个nice section in Pro Git,以及你通常可以用它们做什么。
<子>
¹例外情况是提交者可能提供了-m
的提交消息,但pre-commit
挂钩仍然无法访问该消息,而prepare-commit-msg
或{{1 }} 子>
答案 1 :(得分:6)
我在commit-msg
钩子中实现了这一点。请参阅documentation。
commit-msg
This hook is invoked by git commit, and can be bypassed with the --no-verify option.
It takes a single parameter, the name of the file that holds the proposed commit log message.
Exiting with a non-zero status causes the git commit to abort.
在my_git_project/.git/hooks
下,我添加了此文件commit.msg
(必须是此名称)。我在此文件中添加了以下bash内容,并进行了验证。
#!/usr/bin/env bash
INPUT_FILE=$1
START_LINE=`head -n1 $INPUT_FILE`
PATTERN="^(MYPROJ)-[[:digit:]]+: "
if ! [[ "$START_LINE" =~ $PATTERN ]]; then
echo "Bad commit message, see example: MYPROJ-123: commit message"
exit 1
fi
答案 2 :(得分:1)
挂钩名称应为:
commit-msg
,否则将不会被调用:
答案 3 :(得分:0)
您可以在pre-receive
挂钩(服务器端)中执行以下操作,这将显示修订信息。
old, new, branch = sys.stdin.read().split()
proc = subprocess.Popen(["git", "rev-list", "--oneline","--first-parent" , "%s..%s" %(old, new)], stdout=subprocess.PIPE)
commitMessage=str(proc.stdout.readlines()[0])