我不明白如何为gitolite中的特定存储库创建一个post-receive挂钩(非root安装)
我的裸存储库包含一个应该将工作目录复制到docRoot的网站
(GIT_WORK_TREE=/path/htdocs git checkout -f
)更新
在gitolite之前,我只是更新特定存储库的钩子
Gitolite文档提到所有钩子都应该在hooks/common
,所以我不明白它是如何工作的。
钩子的名称应该是什么,应该在哪里定位以及如何更改它的结构(如果应该)?
答案 0 :(得分:8)
2013年7月更新:接下来是gitolite V2(或'g2'),这是OP当时(2011年11月)使用的版本。
2013年8月更新,使用最新的gitolite 3.x: 您现在有official specific repo hook:
它基本上只是在
<repo.git>/hooks
中创建指向$rc{LOCAL_CODE}/hooks/repo-specific
内的某个文件的符号链接(gitolite-admin
repo除外)
gitolite/hooks/common
中的所有挂钩都会复制到由Gitolite管理的所有存储库中,详见hook propagation documentation。
这意味着你的钩子脚本必须采取特定的动作,具体取决于执行所述钩子的repo。
你可以使用$GL_REPO
变量(gitolite set并将其传递给它收到的任何git命令的所有脚本)。
或者您可以使用在gitolite服务器上注册的一些git配置,例如mirroring hook does。请参阅post-receive.mirrorpush
hook。
OP Eyal R在评论中添加:
但我仍然不明白它是如何完成的(我知道
$GL_REPO
用于确定我正在更新哪个回购但是我错过了实际部分。) 我创建了一个名为post-receive.test
的{{1}}文件,将其放入echo "test"
,运行$HOME/gitolite/hooks/common
,从工作站运行推送 - 没有任何反应(没有“gl-setup
”输出)
我回答说:
钩子应作为链接出现在gitolite服务器上的repo的
test
目录中,并链接回hook
。请注意,它应位于.gitolite/common/hook
,而不是$HOME/.gitolite/common/hook
。
OP确认缺少点是问题。
Hook propagation in gitolite详细介绍了添加挂钩的过程,以及它们在“Using Hooks”中的用法。
答案 1 :(得分:3)
对于使用gitolite的人来说,这是一个相当普遍的需求,并且当不是一个非常高级的用户时,看起来有点难以束缚松散的目标(对我来说很简单)。
跟随stackoverflow和来回的gitolite链接可能有点令人困惑。这些是我的结论和我为实现这一目标所遵循的道路。
正如@VonC提到的那样,自version 3.5.3.1(github link)
以来,已经可以创建特定于存储库的钩子。更新/升级Gitolite
你应该做的第一件事是更新你的gitolite repo。所以 ssh 进入托管gitolite的服务器并移动到安装gitolite的位置(通常为/home/git/gitolite
)作为git用户(通常为git
)
示例:
$ ssh myusername@devserver.com
$ sudo su - git
$ pwd
/home/git
$ cd gitolite
然后我们必须upgrade gitolite。为此,首先我们需要更新gitolite存储库
$ git pull
然后我们必须重复install command (make sure you use the same arguments as before)
$ ./install
最后再次运行设置。
$ gitolite setup
如果这不起作用,您可能无法在PATH
中设置gitolite可执行文件,因此您可以执行以下操作:
$ src / gitolite setup
Gitolite设置(&#34; RC&#34;文件)
这是最让我困惑的部分之一,但结果却非常直接。
着名的&#34; rc&#34;文件位于git的主目录/home/git/.gitolite.rc
。确保你有一个名为LOCAL_CODE
的变量,你应该在那个文件上看到这样的东西,如果没有,加上它。
LOCAL_CODE => "$ENV{HOME}/.gitolite/local"
在&#34;命令中启用&#34;您应该确保repo-specific-hooks
可用,如果没有,请添加它。
ENABLE => [
# COMMANDS
# These are the commands enabled by default
'help',
'desc',
'info',
...,
...,
...,
'repo-specific-hooks'
...,
...,
...
]
Here is the link to the documentation
编写存储库特定挂钩
最后,在本地 gitolite-admin
存储库中,在hooks/repo-specific
变量中设置的目录下创建以下目录LOCAL_CODE
,例如:
gitolite_admin/local/hooks/repo-specific
之后,您实际上可以将钩子脚本添加到该位置,并通过gitolite conf文件将其作为stated in the documentation进行管理。确保脚本可执行。
repo foo
RW+ = @all
option hook.post-receive = deploy
同样,我希望这可以帮助你们中的一些人。
干杯!