我正在使用Git发行版中的post-receive-email
钩子在Git存储库更新时向某些用户发送电子邮件(从post-receive
调用钩子)。
我的所有存储库都是手动管理的。现在,我得到了很多回购和许多用户和组,我必须升级到一些Git存储库管理系统。我选了Gitolite。
但我对如何配置电子邮件通知感到有些不知所措。
更新:我将详细阐述一下这个问题:
第一个问题是:我应该把钩子放在哪里,我应该以某种方式改变它以便它可以与Gitolite一起使用?
第二个问题:
标准post-receive-email
摘要取决于*.git/config
中的三个参数:hooks.envelopesender
,hooks.emailprefix
和hooks.mailinglist
。
对于我在Gitolite下移动的每个存储库,这些参数通常是不同的。在实践中,它们对于相同的权限组是相同的 - 用户可以访问存储库,接收通知,其他用户也不会。
我想避免手动编辑每个存储库的config
文件。如果我可以在整个Gitolite的同一个集中位置配置所有内容,那会更有趣。
那么,有什么提示吗?
答案 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
”(对于最后一个示例)。
其他表单(--add
,value_regex
等)不受支持。注意:除非
rc
文件具有正确的设置,否则这将无效;有关详细信息和安全信息,请参阅GitoliteV3 or 'g3'中变量$GL_GITCONFIG_KEYS
$GIT_CONFIG_KEYS
(现在位于gitoliterc
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讲述了如何配置钩子:
编辑gitolite配置文件(通常为~git/.gitolite.rc
)并取消注释以下行:
LOCAL_CODE => "$rc{GL_ADMIN_BASE}/local"
确保阅读安全警告。
取消注释gitolite配置文件中的repo-specific-hooks
行。
把对应的post-receive hook可执行文件(我使用 git-multimail )
在 gitolite-admin 存储库中作为文件/local/hooks/repo-specific/git-multimail
。
提交并推送它。
允许通过gitolite配置文件添加配置密钥
编辑gitolite配置文件~git/.gitolite.rc
并更新以下行:
GIT_CONFIG_KEYS => ".*"
确保阅读安全警告。您可能希望将其缩小到GIT_CONFIG_KEYS => "multimailhook\..*"
。
这是 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
。