特定存储库的gitolite hook

时间:2011-11-30 08:11:30

标签: hook gitolite

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

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

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

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

2 个答案:

答案 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.1github 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

同样,我希望这可以帮助你们中的一些人。

干杯!