在Git中跟踪Gitolite(常用)钩子

4
在Gitolite的钩子文档manual中,我唯一找到的是:
如果您想添加自己的钩子,只要不是“update”钩子,就很容易。只需将其添加到$HOME/.gitolite/hooks/common并运行gitolite setup即可。
然而,我还想跟踪对这些钩子所做的更改,并有可能在需要时恢复到旧版本(审计功能被cited作为使用Gitolite的重要优势之一)。因此,基本上,我希望像在我的gitolite-admin克隆中添加一个hooks文件夹,然后将钩子推送到服务器(就像您配置或添加公共密钥一样)。
这有意义吗? 可以实现吗?
2个回答

4
这些钩子可以添加到你的gitolite-admin仓库(gitolite-admin/hooks/common),然后推送到Gitolite服务器,因此它们是有版本控制的。(至少在Gitolite V2中是这样,我需要检查一下Gitolite V3)
事实证明,它确实有效,除了OP Rijk报告的问题:

问题出在我的配置文件中,导致安装程序失败。
将那行注释掉,触发器就能正常安装了。

这是我gitolite.conf中的那一行:

config hooks.showrev = "git log -1 --name-status --format='%%h (%%ad) ------------------------------%%n%%n%%B' %s". 

不知道为什么,但引发了以下错误:
FATAL: bad value 'git log -1 --name-status --format='%%h (%%ad) ------------------------------%%n%%n%%B' %s'. 

暂时将其注释掉,可能稍后会重写post-receive-email脚本。


提问者Rijk的当前解决方案:

我目前在Gitolite v3上的解决方案是:

  • 将东西放在gitolite-admin/local-code/hooks/common
  • 然后在服务器上放置一个全路径符号链接,指向$HOME/.gitolite/hooks/common中的相关项目。

不行,不起作用。钩子确实被推送到服务器(最终出现在~/.gitolite/hooks/common中,但是无法执行),但它没有被复制/链接到Gitolite下的存储库中,即使手动运行了gitolite setup也是如此。我做错了什么吗? - Rijk
@Rijk 只是想确认一下,你使用的 gitolite 版本是哪个? - VonC
@Rijk 很好。很高兴我能帮忙。你可以评论一下我们在 conf 文件中应该注意哪一行吗? - VonC
这是我 gitolite.conf 文件中的一行:config hooks.showrev = "git log -1 --name-status --format='%%h (%%ad) ------------------------------%%n%%n%%B' %s"。不知道为什么,但触发了以下错误:FATAL: bad value 'git log -1 --name-status --format='%%h (%%ad) ------------------------------%%n%%n%%B' %s'。现在已将其注释掉,以后可能会重写 post-receive-email 脚本。 - Rijk
请问您实际上安装了自定义钩子的位置在哪里?我正在运行Gitolite v3,当我尝试添加gitolite-admin/hooks/common并推送时,Gitolite返回错误“remote: FATAL: no files/dirs called 'hooks' or 'logs' are allowed”。 - Errol
显示剩余6条评论

3
如果您查看src/lib/Gitolite/Conf.pm中的代码,您会注意到如果值中有UNSAFE_PATT字符串之一,它会打印出“错误值”。
而UNSAFE_PATT看起来像这样(在src/lib/Gitolite/Rc.pm中): $UNSAFE_PATT = qr([`~#\$\&()|;<>]);
问题在于您使用了括号(以及gitolite.conf中简单的解析)。

2
啊..有没有什么方法可以转义括号? - Rijk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接