服务器端预提交挂钩在 GitLab 社区版中有效吗?
Do server-side pre-commit hooks work in GitLab community edition?
如果我...
- 对托管 Git 数据的服务器具有文件系统访问权限 GitLab Community Edition 安装
- ...已经有一个用于客户端安装的工作
pre-commit
挂钩,它会阻止未通过特定规则的提交(例如,行以空格结尾的 C 文件)
- ...然后将此
pre-commit
挂钩复制到存储库顶级文件夹下的 custom_hooks
文件夹中,如 described here
...然后我是否能够阻止人们推送违反挂钩检查的提交?
$ 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
有问题的钩子已经在客户端工作了——但我在这里问是因为我不确定两件事:
GitLab 的社区版是否支持此功能?上面的链接文章以粗体显示 "CORE ONLY",我猜这意味着这不适用于社区版?
预提交挂钩能否在服务器端正常运行?或者我是否需要适应使用不同的钩子(pre-receive
?)如果是这样,一个示例适应会很有帮助。
为确保我没有创建 XY 问题的另一个实例:我要求的是 如何设置服务器端的简单示例 GitLab Community Edition commit "filters" 是 运行 当 "git push" 从提交者 执行时。我已经有一个用于客户端 Git 挂钩(即在 hooks/pre-commit 下)的此类过滤器的工作版本 - 并且正在寻找一种快速的方法来应用相同的检查逻辑服务器端。
P.S。已经尝试过天真的事情,即在服务器端的 "hooks" 文件夹下按原样复制挂钩:没有变化 - 提交没有任何检查。
- 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
- 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 所有脚本挂钩类型。
如果我...
- 对托管 Git 数据的服务器具有文件系统访问权限 GitLab Community Edition 安装
- ...已经有一个用于客户端安装的工作
pre-commit
挂钩,它会阻止未通过特定规则的提交(例如,行以空格结尾的 C 文件) - ...然后将此
pre-commit
挂钩复制到存储库顶级文件夹下的custom_hooks
文件夹中,如 described here
...然后我是否能够阻止人们推送违反挂钩检查的提交?
$ 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
有问题的钩子已经在客户端工作了——但我在这里问是因为我不确定两件事:
GitLab 的社区版是否支持此功能?上面的链接文章以粗体显示 "CORE ONLY",我猜这意味着这不适用于社区版?
预提交挂钩能否在服务器端正常运行?或者我是否需要适应使用不同的钩子(
pre-receive
?)如果是这样,一个示例适应会很有帮助。
为确保我没有创建 XY 问题的另一个实例:我要求的是 如何设置服务器端的简单示例 GitLab Community Edition commit "filters" 是 运行 当 "git push" 从提交者 执行时。我已经有一个用于客户端 Git 挂钩(即在 hooks/pre-commit 下)的此类过滤器的工作版本 - 并且正在寻找一种快速的方法来应用相同的检查逻辑服务器端。
P.S。已经尝试过天真的事情,即在服务器端的 "hooks" 文件夹下按原样复制挂钩:没有变化 - 提交没有任何检查。
- 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
- 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 所有脚本挂钩类型。