大家早上好,对于github上的Java项目,我必须使用github函数,例如“ issues”。为此,所有“提交”必须至少包含一个出口。因此,为了防止我的团队做出死胡同的提交,我必须在每次提交之前进行检查。GitHooks是这项工作的理想工具。仅用于实现Windows兼容脚本。
在linux环境中,我知道如何中断提交,但是我不知道如何获取可以检查条件的提交内容。
通常,Git钩子不是这种情况下的好工具,因为用户可以使用git commit --no-verify
绕开它们(以及多种其他技术)。用户系统上的任何内容都不是有效的控件,因为用户可以对其进行修改或删除。
通常,此行为在服务器端完成。在某些情况下,您可以运行pre-receive
钩子检查这些内容,但这在GitHub上是不可能的。相反,除了您要进行的其他检查之外,您还应该在CI系统中进行检查。
您可以像这样在shell中编写脚本来做到这一点,其中两个参数是主分支(通常是master
)和拉取请求的提交HEAD:
#!/bin/sh -e
git rev-list "$1".."$2" | xargs -L1 sh -c 'git log -1 --format=%b "$@" | grep -E "#[0-9]+"'
这将检查提交消息中的模式#[0-9]+
,如果不匹配则退出非零值。如果您使用bash或sh调用该脚本,那么它也将在Windows上运行,因为Windows上所有版本的Git都带有一些shell实现。