如果不包含某些问题,如何禁止提交

How to prohibit commits if they do not contain some Issue(s)

大家早上好, 对于 github 上的 Java 中的项目,我必须使用 github 函数,例如 "issues"。为此,所有 "commits" 必须至少包含一个出口。因此,为了防止我的团队做出死胡同的提交,我必须在每次提交之前进行检查。 GitHooks 是这项工作的完美工具。只是,实现一个 Windows 兼容的脚本。

在 linux 环境中,我知道如何中断提交,但我不知道如何获取能够检查条件的提交内容。

一般来说,Git 钩子不是这种情况下的好工具,因为用户可以使用 git commit --no-verify(以及各种其他技术)绕过它们。用户系统上的任何内容都不是有效控件,因为用户可以修改或删除它。

通常,此行为是在服务器端完成的。在某些情况下,您可以 运行 pre-receive 挂钩来检查这些内容,但这在 GitHub 上是不可能的。相反,除了您执行的其他检查之外,您还应该在 CI 系统中检查此项。

您可以像这样在 shell 中编写脚本来执行此操作,其中两个参数是主分支(通常 master)和拉取请求的提交 HEAD:

#!/bin/sh -e

git rev-list "".."" | xargs -L1 sh -c 'git log -1 --format=%b "$@" | grep -E "#[0-9]+"'

这将检查提交消息中的模式 #[0-9]+,如果不匹配则退出非零。如果您使用 bash 或 sh 调用它,这样的脚本也可以在 Windows 上运行,因为 Windows 上的所有 Git 版本都带有一些 shell 实现.