如何使用Gitolite设置post-receive-email Git hook

时间:2011-02-20 04:09:46

标签: git gitolite post-receive-email

我正在使用Git发行版中的post-receive-email钩子在Git存储库更新时向某些用户发送电子邮件(从post-receive调用钩子)。

我的所有存储库都是手动管理的。现在,我得到了很多回购和许多用户和组,我必须升级到一些Git存储库管理系统。我选了Gitolite。

但我对如何配置电子邮件通知感到有些不知所措。

更新:我将详细阐述一下这个问题:

第一个问题是:我应该把钩子放在哪里,我应该以某种方式改变它以便它可以与Gitolite一起使用?

第二个问题:

标准post-receive-email摘要取决于*.git/config中的三个参数:hooks.envelopesenderhooks.emailprefixhooks.mailinglist

对于我在Gitolite下移动的每个存储库,这些参数通常是不同的。在实践中,它们对于相同的权限组是相同的 - 用户可以访问存储库,接收通知,其他用户也不会。

我想避免手动编辑每个存储库的config文件。如果我可以在整个Gitolite的同一个集中位置配置所有内容,那会更有趣。

那么,有什么提示吗?

4 个答案:

答案 0 :(得分:18)

您可以查看doc hook的初学者:

  

我在哪里(管理员)放挂钩?

     

通常,所有挂钩都会进入hooks/common目录。只有admin repo的特殊更新后挂钩才会进入hooks/gitolite-admin

GitoliteV3 doc on 'mirroring'提供了自定义挂钩的替代方法。


关于第二个问题:

  

我想避免手动编辑每个存储库的配置文件   如果我可以在整个Gitolite的同一个集中位置配置所有内容,那会更有趣。

doc gitolite.conf非常明确:

  

repo specific git config命令

     

有时您想为某些回购指定git config设置   例如,您可能有一个自定义的接收后挂钩,在发生推送时发送电子邮件,此挂钩需要知道将电子邮件发送给谁等。

     

您可以通过在“repo”段落中指定类似内容来设置git config值:

     

示例用法:如果您在hooks/common中放置了需要特定于每个仓库的配置信息的挂钩,则可以执行以下操作:

repo gitolite
    config hooks.mailinglist = gitolite-commits@example.tld
    config hooks.emailprefix = "[gitolite] "
    config foo.bar = ""
    config foo.baz =
  

语法很简单:

config sectionname.keyname = [optional value_string]
  

这可以是简单的“git config section.key value”(对于上面的前3个示例)或“git config --unset-all section.key”(对于最后一个示例)。
  其他表单(--addvalue_regex等)不受支持。

     

注意:除非rc文件具有正确的设置,否则这将无效;有关详细信息和安全信息,请参阅GitoliteV3 or 'g3'中变量 $GL_GITCONFIG_KEYS $GIT_CONFIG_KEYS(现在位于gitolite rc file)的注释。

答案 1 :(得分:6)

目前,这不起作用:

repo @all
    config foo.bar = "baz"

我认为你希望它可以工作,但由于其他压力,以及有一个解决方法的事实,我现在的名单上有点低:

@almostall = repo1 repo2 repo3
@almostall = repo4 repo5 repo6 [add as many more as you like]

[... later ...]
repo @almostall
    config foo.bar = "baz"

希望对@all

的疏忽有所帮助和抱歉

答案 2 :(得分:1)

这是一个快速的单行程序,用于向gitolite.conf添加与repo同名的描述。如果你正在使用这个大的@almostall方法和gitolite,你需要这个,以便你有每个回购的描述。这节省了我一小时的打字时间,所以不得不分享:

先尝试:

sed 's/^\(repo *\)\(.*\)/\1\2\n\t\t\2 = "\2"/' gitolite.conf

然后尝试使用编辑,但仍然先进行备份:

cp gitolite.conf gitolite.conf.backup

然后进行编辑:

sed -i 's/^\(repo *\)\(.*\)/\1\2\n\t\t\2 = "\2"/' gitolite.conf

干杯!

答案 3 :(得分:1)

gitolite cookbook讲述了如何配置钩子:

1。在gitolite中启用本地非核心程序

编辑gitolite配置文件(通常为~git/.gitolite.rc)并取消注释以下行:

LOCAL_CODE => "$rc{GL_ADMIN_BASE}/local"

确保阅读安全警告。

2。启用特定于存储库的挂钩

取消注释gitolite配置文件中的repo-specific-hooks行。

3。添加电子邮件挂钩

把对应的post-receive hook可执行文件(我使用 git-multimail ) 在 gitolite-admin 存储库中作为文件/local/hooks/repo-specific/git-multimail

提交并推送它。

4。配置多邮件挂钩

的设置

允许通过gitolite配置文件添加配置密钥 编辑gitolite配置文件~git/.gitolite.rc并更新以下行:

GIT_CONFIG_KEYS => ".*"

确保阅读安全警告。您可能希望将其缩小到GIT_CONFIG_KEYS => "multimailhook\..*"

5。配置多邮件电子邮件挂钩

这是 gitolite-admin 存储库中gitolite.conf文件的示例配置:

repo @all
    config multimailhook.environment      = gitolite
    config multimailhook.from             = git@gitserver.com
    config multimailhook.mailinglist      = your@email.com

repo xyz
    option hook.post-receive = git-multimail

我决定使用repo特定的钩子并将它们存储在gitolite-admin存储库中。或者,您可以使用全局挂钩(/local/hooks/common)或将它们存储在gitolite服务器上的其他位置,并在那里指向LOCAL_CODE