特定存储库的gitolite hook

Eya*_*l R 11 hook gitolite

我不明白如何为gitolite(非root安装)中的特定存储库创建post-receive挂钩

我的裸存储库包含一个网站,应该GIT_WORK_TREE=/path/htdocs git checkout -f在更新时将工作目录复制到docRoot()

在gitolite之前,我只是更新特定存储库的钩子.
Gitolite文档提到所有钩子都应该在这里,hooks/common所以我不明白它是如何工作的.

什么应该是钩子的名称,应该在哪里定位以及应该如何改变它的结构(如果它应该)?

Von*_*onC 8

2013年7月更新:接下来是gitolite V2(或'g2'),这是当时OP(2011年11月)使用的版本.

使用最新的gitolite 3.x更新2013年8月:您现在拥有官方特定的repo hook:

它基本上只是创建一个符号链接<repo.git>/hooks指向内部的一些文件$rc{LOCAL_CODE}/hooks/repo-specific(除了gitolite-adminrepo)


所有钩子gitolite/hooks/common都在Gitolite管理的所有存储库中复制,详见钩子传播文档.
这意味着你的钩子脚本必须采取特定的操作,具体取决于执行所述钩子的repo.

你可以使用$GL_REPO变量(gitolite set并将其传递给它收到的任何git命令的所有脚本).

或者您可以使用gitolite服务器上注册的一些git配置,就像镜像挂钩一样.看post-receive.mirrorpush钩子.

OP的Eyal [R在评论中补充说:

但是我仍然不明白它是如何完成的(我明白这$GL_REPO用于确定我正在更新哪个仓库,但我错过了实际部分).
我创建了一个名为post-receive.testwith 的文件echo "test",将其放入$HOME/gitolite/hooks/common,运行gl-setup,从工作站运行推送 - 没有任何反应(没有" test"输出)

我回答说:

钩子应该hook作为链接出现在gitolite服务器上的repo目录中,链接回到.gitolite/common/hook.请注意,它应该在$HOME/.gitolite/common/hook,而不是/gitolite.

OP确认缺少点是问题.

添加钩子的过程详见了gitolite中的钩子传播,以及它们在" 使用钩子 "中的用法.