Git提交钩子 - 如何使用commit-msg钩子检查消息中的字符串?

4
我需要制作一个commit-msg钩子,以检查提交消息是否包含“app.asana”的任何部分。我查阅了一些参考资料和文档,知道我需要使用commit-msg来完成这个任务。我必须使用Perl或Bash来完成这个任务。
有没有人对此有线索或可以提供更多例子来学习如何完成它?
谢谢。

这个链接可能会有所帮助。 - devnull
我已经访问过这个页面了,但谢谢。经过更多的研究,我做到了...它实际上非常简单。 - lol
1个回答

10
我发现了我的问题的答案。如果有人需要帮助...
我刚刚在.git/hooks目录中创建了一个commit-msg文件,内容如下:
#!/bin/sh

test -n "$(grep 'app.asana.com/' ${1})" || {
        echo >&2 "ERROR: Commit message is missing Asana's task link.\n\nPlease append the Asana's task link relative to this commit into the commit message."
        exit 1
}

每个用户都需要在.git/hooks目录下拥有一个commit-msg文件。为了解决这个问题,我将commit-msg添加到项目文件夹中(这样我就可以拉取它),并添加了另一个名为commit-msg-hook.sh的文件,其中包含以下内容:
#!/bin/sh

cp commit-msg .git/hooks/commit-msg
chmod +x .git/hooks/commit-msg
echo "\nThe commit-msg hook was added to git hooks"

我希望你能给予我改进的建议。谢谢。


1
是我自己的问题还是第一个代码片段中的第二行不需要/无法工作。chmod a+x .git/hooks/commit-msg是为了使commit-msg可执行,以便它能够与git一起运行。但是,如果文件(因此也包括该命令)没有+x,则该文件将永远无法执行,因此在实际文件中包含此命令是没有意义的。这篇文章是从2013年开始的,所以如果我错了,请任何人纠正我。肯定有其他人注意到了这一点吧? - redfox05
@Russell 没错,我已经修复了。现在正在进行同行评审。 - greduan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接