gitlab pre-receive hook 为所有存储库执行,尽管只为一个存储库定义

gitlab pre-receive hook is executed for all repositories though defined only for one

我们有 gitlab v7.10.5 在测试服务器端预接收挂钩时,我注意到一些奇怪的行为。仅为一个存储库定义的挂钩以某种方式对服务器上的所有存储库执行。

我写了只输出"Hello world"微笑信息的测试脚本。 我已经将它安装为一个存储库的预接收挂钩,比如 test.git。工作正常。

当我推送到另一个仓库时,我收到 "Hello world" 消息。 另一个回购没有连接到测试回购。 这是一个错误吗?

原因是因为 gitlab 存储库中的 hooks 目录只是指向 gitlab-shell hooks 文件夹的符号链接。如果您覆盖了该预接收脚本,您实际上可以破坏 GitLab,因为它依赖于此来应用它的权限级别。因为它是所有项目的通用 hooks 文件夹,所以它会 运行 所有项目。

相反,支持 custom_hooks 文件夹,其中包含 gitlab 全局挂钩将检测和调用的预接收脚本。