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



大家早上好, 对于 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实现。

最新更新