首页 > 解决方案 > 如果提交不包含某些问题,如何禁止提交

问题描述

大家早上好,对于github上的Java项目,我必须使用“问题”之类的github功能。为此,所有“提交”必须包含至少一个出口。因此,为了防止我的团队进行死胡同提交,我必须在每次提交之前进行检查。GitHooks 是完成这项工作的完美工具。仅用于实现与 Windows 兼容的脚本。

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

标签: javagithubcommitgithooks

解决方案


一般来说,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 实现。


推荐阅读