12

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

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

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

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

4

2 回答 2

8

2013 年 7 月更新:以下是 gitolite V2(或“g2”),它是当时 OP 使用的版本(2011 年 11 月)。

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

它基本上只是创建一个<repo.git>/hooks指向内部文件的符号链接$rc{LOCAL_CODE}/hooks/repo-specificgitolite-admin回购除外)


中的所有钩子gitolite/hooks/common都在 Gitolite 管理的所有存储库中复制,如钩子传播文档中所述。
这意味着你的钩子脚本必须根据执行所述钩子的仓库采取特定的行动。

您可以使用该$GL_REPO变量(gitolite 为它接收的任何 git 命令设置并传递给它的所有脚本)。

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

OP Eyal R在评论中添加:

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

我回答说:

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

OP 确认丢失的点是问题所在。

添加钩子的过程在 gitolite 中的钩子传播中详细介绍,以及它们在“使用钩子”中的用法。

于 2011-11-30T09:15:38.137 回答
4

对于使用 gitolite 的人来说,这是一个相当普遍的需求,当不是一个非常高级的用户时(至少对我来说),似乎有点难以解决松散的问题。

来回跟踪 stackoverflow 和 gitolite 的链接可能有点令人困惑。这些是我的结论,也是我为实现这一目标所遵循的路径。

正如@VonC 提到的那样,自3.5.3.1 版github 链接)以来,已经可以创建特定于存储库的钩子

更新/升级 Gitolite

您应该做的第一件事是更新您的 gitolite 存储库。因此,SSH/home/git/gitolite进入托管 gitolite 的服务器,并以git 用户(通常)身份移动到安装 gitolite 的位置(通常git

例子:

$ ssh myusername@devserver.com
$ sudo su - git
$ pwd
/home/git
$ cd gitolite

然后我们必须升级 gitolite。为此,首先我们需要更新 gitolite 存储库

$ git pull

然后我们必须重复安装命令(确保使用与以前相同的参数)

$ ./install

最后再次运行设置。

$ gitolite setup

如果这不起作用,您可能还没有在您的 中设置 gitolite 可执行文件PATH,因此您可以执行以下操作:

$ src/gitolite 设置

Gitolite 设置(“RC”文件)

这是最让我困惑的部分之一,但最终它非常简单。

著名的“rc”文件位于 git 的主目录/home/git/.gitolite.rc。确保您有一个名为 的变量LOCAL_CODE,您应该在该文件上看到类似这样的内容,如果没有,请添加它。

LOCAL_CODE => "$ENV{HOME}/.gitolite/local"

在“命令启用功能”部分中,您应该确保它repo-specific-hooks可用,如果没有,请添加它。

ENABLE => [

    # COMMANDS

        # These are the commands enabled by default
        'help',
        'desc',
        'info',
        ...,
        ...,
        ...,
        'repo-specific-hooks'
        ...,
        ...,
        ...
]

这是文档的链接

编写存储库特定的钩子

最后,在您的本地 存储库中,在您刚刚在变量中设置的目录下gitolite-admin创建以下目录,例如:hooks/repo-specificLOCAL_CODE

gitolite_admin/local/hooks/repo-specific

之后,您实际上可以将钩子脚本添加到该位置并通过文档中所述的 gitolite conf 文件管理它们。确保脚本是可执行的。

repo foo
RW+                       =   @all
option hook.post-receive  =   deploy

再次,我希望这对你们中的一些人有所帮助。

干杯!

于 2014-03-15T00:09:19.537 回答