我不明白如何为a创建一个post-receive hook 具体 gitolite中的存储库(非root安装)
我的裸存储库包含一个应该将工作目录复制到docRoot的网站
(GIT_WORK_TREE=/path/htdocs git checkout -f
)更新
在gitolite之前,我只是更新特定存储库的钩子。
Gitolite文件提到所有钩子应该在 hooks/common
所以我不明白它是如何工作的。
什么应该是钩子的名称,应该在哪里定位以及如何更改它的结构(如果它应该)?
2013年7月更新:接下来是gitolite V2(或'g2'),这是OP当时(2011年11月)使用的版本。
使用最新的gitolite 3.x更新2013年8月:
你现在有 官方具体回购挂钩:
它基本上只是在创建一个符号链接 <repo.git>/hooks
指向里面的一些文件 $rc{LOCAL_CODE}/hooks/repo-specific
(除了 gitolite-admin
回购)
所有挂钩 gitolite/hooks/common
在Gitolite管理的所有存储库中都会复制,详情请参阅 钩子传播文档。
这意味着你的钩子脚本必须采取特定的动作,具体取决于执行所述钩子的repo。
你可以使用 $GL_REPO
变量(gitolite设置并传递给它接收的任何git命令的所有脚本)。
或者你可以使用在gitolite服务器上注册的一些git配置,比如 镜像挂钩。见 post-receive.mirrorpush
钩。
该 OP Eyal R. 在评论中添加:
但我仍然不明白它是如何完成的(我理解这一点 $GL_REPO
用于确定我正在更新哪个回购但我缺少实际部分)。
我创建了一个名为的文件 post-receive.test
同 echo "test"
, 把它放进去 $HOME/gitolite/hooks/common
,跑了 gl-setup
,从工作站推出 - 没有任何反应(没有“test
“输出)
我回答说:
钩子应该出现在 hook
您在gitolite服务器上的repo目录作为链接,链接回到 .gitolite/common/hook
。请注意,它应该在 $HOME/.gitolite/common/hook
不是 /gitolite
。
OP确认缺少点是问题。
添加钩子的过程详见 钩子在gitolite中传播,以及它们在“使用钩子”。
2013年7月更新:接下来是gitolite V2(或'g2'),这是OP当时(2011年11月)使用的版本。
使用最新的gitolite 3.x更新2013年8月:
你现在有 官方具体回购挂钩:
它基本上只是在创建一个符号链接 <repo.git>/hooks
指向里面的一些文件 $rc{LOCAL_CODE}/hooks/repo-specific
(除了 gitolite-admin
回购)
所有挂钩 gitolite/hooks/common
在Gitolite管理的所有存储库中都会复制,详情请参阅 钩子传播文档。
这意味着你的钩子脚本必须采取特定的动作,具体取决于执行所述钩子的repo。
你可以使用 $GL_REPO
变量(gitolite设置并传递给它接收的任何git命令的所有脚本)。
或者你可以使用在gitolite服务器上注册的一些git配置,比如 镜像挂钩。见 post-receive.mirrorpush
钩。
该 OP Eyal R. 在评论中添加:
但我仍然不明白它是如何完成的(我理解这一点 $GL_REPO
用于确定我正在更新哪个回购但我缺少实际部分)。
我创建了一个名为的文件 post-receive.test
同 echo "test"
, 把它放进去 $HOME/gitolite/hooks/common
,跑了 gl-setup
,从工作站推出 - 没有任何反应(没有“test
“输出)
我回答说:
钩子应该出现在 hook
您在gitolite服务器上的repo目录作为链接,链接回到 .gitolite/common/hook
。请注意,它应该在 $HOME/.gitolite/common/hook
不是 /gitolite
。
OP确认缺少点是问题。
添加钩子的过程详见 钩子在gitolite中传播,以及它们在“使用钩子”。
对于使用gitolite的人来说,这是一个相当普遍的需求,并且当不是一个非常高级的用户时(看起来对我而言),看起来有点困难。
堆栈溢出和gitolite之间来回链接可能会有点混乱。这些是我的结论和我为实现这一目标所遵循的道路。
由于@VonC提到创建特定于存储库的钩子已经可以了 版本3.5.3.1 (github链接)
更新/升级Gitolite
你应该做的第一件事是更新你的gitolite repo。所以 SSH 进入你的服务器托管gitolite并移动到安装gitolite的位置(通常 /home/git/gitolite
)作为git用户(通常 git
)
例:
$ ssh myusername@devserver.com
$ sudo su - git
$ pwd
/home/git
$ cd gitolite
然后我们必须 升级gitolite。为此,首先我们需要更新gitolite存储库
$ git pull
然后我们要重复一遍 install命令(确保使用与以前相同的参数)
$ ./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
repository创建以下目录 hooks/repo-specific
在您刚刚设置的目录下 LOCAL_CODE
变量,例如:
gitolite_admin/local/hooks/repo-specific
之后,您实际上可以将钩子脚本添加到该位置,并通过gitolite conf文件管理它们 在文件中说明。确保脚本是可执行的。
repo foo
RW+ = @all
option hook.post-receive = deploy
再说一遍,我希望这能帮助你们中的一些人。
干杯!