服务器端预提交挂钩在 GitLab 社区版中有效吗?

Do server-side pre-commit hooks work in GitLab community edition?

如果我...

...然后我是否能够阻止人们推送违反挂钩检查的提交?

 $ cd /var/opt/gitlab/git-data/repositories/someone/somerepo.git/
 $ mkdir custom_hooks
 $ sudo chown git.git custom_hooks
 $ cp /path/to/some/pre-commit-hook custom_hooks/pre-commit
 $ sudo chown git.git custom_hooks/pre-commit
 $ sudo chmod 755 custom_hooks/pre-commit

有问题的钩子已经在客户端工作了——但我在这里问是因为我不确定两件事:

  1. GitLab 的社区版是否支持此功能?上面的链接文章以粗体显示 "CORE ONLY",我猜这意味着这不适用于社区版?

  2. 预提交挂钩能否在服务器端正常运行?或者我是否需要适应使用不同的钩子(pre-receive?)如果是这样,一个示例适应会很有帮助。

为确保我没有创建 XY 问题的另一个实例:我要求的是 如何设置服务器端的简单示例 GitLab Community Edition commit "filters" 是 运行 当 "git push" 从提交者 执行时。我已经有一个用于客户端 Git 挂钩(即在 hooks/pre-commit 下)的此类过滤器的工作版本 - 并且正在寻找一种快速的方法来应用相同的检查逻辑服务器端。

P.S。已经尝试过天真的事情,即在服务器端的 "hooks" 文件夹下按原样复制挂钩:没有变化 - 提交没有任何检查。

  1. Is this functionality supported in the Community Edition of GitLab? The linked article above claims "CORE ONLY" in bold, which I am guessing means this doesn't work for the Community Edition?

是的。您可以为每个存储库添加自定义挂钩脚本,或者为 Gitlab CE

中的所有存储库添加一个 global script
  1. Can a pre-commit hook function as-is on the server-side? Or do I need to adapt to using a different hook instead (pre-receive?) If so, an example adaptation would help a lot

预提交挂钩将 运行 在服务器端提交之前,这没有意义。您需要将预提交转换为预接收、预推送、post-接收或更新脚本挂钩。我相信,在您的情况下,您需要一个预接收挂钩来检查提交,然后再在 gitlab 中接受它。 Here the documentation 所有脚本挂钩类型。