为中央仓库(或类似的东西)添加了一个预提交钩子

时间:2013-08-19 21:12:37

标签: git gitlab pre-commit-hook

好的,所以我想出了如何添加一个预提交钩子来检查一条引用JIRA项目的消息。

#!/bin/sh
test "" != "$(grep 'JIRA-' "$1")" || {
        echo >&2 "ERROR: Commit message is missing Jira issue number."
        exit 1
}

我将此添加到我的本地仓库并且很酷。我对它做的每个提交都有这个提交消息。 但是,我感兴趣的是,有一大堆开发人员都致力于他们的本地存储,然后推送/拉动到GitHub上的远程主服务器。我想要的是一种类似的机制,当推送更改为GitLab上的远程仓库时,他们必须同样引用JIRA。

这样做的好方法是什么?

2 个答案:

答案 0 :(得分:3)

Sytse Sijbrandijanswer所述,并在“GitLab Enterprise Edition”页面中详细说明,GitLab EE现在支持:

  

Git挂钩规则(提交消息必须提及问题,防止标记删除等)

但同样,那就是 Enterprise 版(EE),而不是社区版(CE)。
对于后者,请参阅我的原始答案。


原始答案(2013年8月)

你可以添加一个pre-receive钩子来阻止任何推送到gitlab管理的裸仓库的提交。

然而,困难在于为通过GitLab创建的任何新项目(和repo)添加该钩子,作为thread illustrates

GitLab doesn't used gitolite anymore开始,没有简单或原生的方法(目前为5.​​X和6.0)。

  

现在您可以将钩子放在gitlab-shell中的hooks目录中,然后修改https://github.com/gitlabhq/gitlab-shell/blob/master/lib/gitlab_projects.rb#L46以反映。

Gitlab-Shell/lib/gitlab_projects.rb

def create_hooks_cmd
  pr_hook_path = File.join(ROOT_PATH, 'hooks', 'post-receive')
  up_hook_path = File.join(ROOT_PATH, 'hooks', 'update')
  "ln -s #{pr_hook_path} #{full_path}/hooks/post-receive && ln -s #{up_hook_path} #{full_path}/hooks/update"
end
  

在那里获得我们自己的集中挂钩。

答案 1 :(得分:1)

GitLab 6.7企业版将拥有' Git钩子'允许这样做。