我想在GIT中进行配置,以强制所有提交消息遵循特定模式。我该如何做?编辑:我想在Github上使用它。
ej83mcc01#
最好的方法是设置一个CI作业来检查提交消息并验证它们是否符合你想要的格式。在某些环境中,也可以使用pre-receive钩子,尽管在github.com上是不可能的(但在GitHub Enterprise Server上是可以的)。该命令看起来像这样:
pre-receive
#!/bin/sh git rev-list $1 | \ xargs -L1 sh -c 'git log --format=%B -1 $0 | grep -qs Signed-off-by'
字符串在我的例子中,我向命令传递了分支上的一系列提交(也就是说,以BASE..HEAD的形式),我的检查是验证每个提交都包含文本Signed-off-by。你可以用任何你喜欢的东西替换grep命令,如果提交消息是可接受的,它就退出0,如果不是,它就退出非零。然后,脚本本身在成功时退出0,如果提交不可接受,则返回非零值,然后您可以拒绝提交。您可能希望通过使用类似的技术为开发人员提供commit-msg钩子来帮助他们。然而,正如Git FAQ中所概述的那样,强制客户端钩子都是无效的,因为它们可以在没有任何人注意的情况下被开发人员绕过,并且也会让一些高级开发人员感到厌烦,所以您应该让他们选择加入那些想要他们的人。
BASE..HEAD
Signed-off-by
grep
commit-msg
1条答案
按热度按时间ej83mcc01#
最好的方法是设置一个CI作业来检查提交消息并验证它们是否符合你想要的格式。在某些环境中,也可以使用
pre-receive
钩子,尽管在github.com上是不可能的(但在GitHub Enterprise Server上是可以的)。该命令看起来像这样:
字符串
在我的例子中,我向命令传递了分支上的一系列提交(也就是说,以
BASE..HEAD
的形式),我的检查是验证每个提交都包含文本Signed-off-by
。你可以用任何你喜欢的东西替换grep
命令,如果提交消息是可接受的,它就退出0,如果不是,它就退出非零。然后,脚本本身在成功时退出0,如果提交不可接受,则返回非零值,然后您可以拒绝提交。您可能希望通过使用类似的技术为开发人员提供
commit-msg
钩子来帮助他们。然而,正如Git FAQ中所概述的那样,强制客户端钩子都是无效的,因为它们可以在没有任何人注意的情况下被开发人员绕过,并且也会让一些高级开发人员感到厌烦,所以您应该让他们选择加入那些想要他们的人。