16

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

我所有的存储库都是手动管理的。现在,我获得了如此多的存储库以及如此多的用户和组,以至于我必须升级到一些 Git 存储库管理系统。我选了Gitolite。

但是我对如何配置电子邮件通知有点茫然。

更新:我将详细说明这个问题:

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

第二个问题:

标准post-receive-email挂钩取决于*.git/config:hooks.envelopesender和中hooks.emailprefix的三个参数hooks.mailinglist

通常,对于我在 Gitolite 下移动的每个存储库,这些参数都是不同的。实际上,对于相同的权限组,它们是相同的——有权访问存储库的用户,接收通知,其他人——不是。

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

那么,有什么提示吗?

4

4 回答 4

18

您可以查看初学者的文档挂钩:

我(管理员)应该把钩子放在哪里?

通常,所有挂钩都进入hooks/common目录。只有用于adminrepo 的特殊更新后挂钩进入hooks/gitolite-admin.

但是关于“镜像”的GitoliteV3 文档提供了自定义钩子的替代方案。


对于第二个问题:

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

文档 gitolite.conf非常清楚:

回购特定的 git 配置命令

有时您想git config为某些存储库指定设置。
例如,您可能有一个自定义的 post-receive 钩子,它在推送发生时发送电子邮件,并且该钩子需要知道将电子邮件发送给谁等。

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

示例用法:如果您放置了一个钩子,hooks/common该钩子需要特定于每个 repo 的配置信息,您可以这样做:

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”(对于最后一个示例)。
不支持其他形式(--add、 thevalue_regex等)。

rc注意:除非文件具有正确的设置,否则这将不起作用;请参阅变量周围的评论$GL_GITCONFIG_KEYS $GIT_CONFIG_KEYS(现在在GitoliteV3 或 'g3'中)在gitoliterc文件中获取详细信息和安全信息。

于 2011-02-21T07:43:57.450 回答
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 的疏忽感到抱歉

于 2011-03-03T07:13:47.010 回答
1

这是一个快速的单行代码,可以将描述添加到与 repo 同名的 gitolite.conf 中。如果您使用这种大的@almostall 方法和 gitolite,您需要这个,以便您对每个 repo 都有描述。这节省了我一个小时的打字时间,所以不得不分享:

先试试:

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

干杯!

于 2011-08-24T12:34:00.650 回答
1

gitolite 食谱讲述了如何配置钩子:

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

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

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

确保阅读安全警告。

2.启用存储库特定的钩子

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

3.添加邮件挂钩

将对应的 post-receive 挂钩可执行文件(我使用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-admingitolite.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那里。

于 2018-02-13T00:28:18.140 回答