我想在 gitolite 中实现基于 repo 的钩子。
有可能吗?
我正在使用gitolite 3 (g3)。
自 Gitolite 3.6+ 起,可以使用“特定于存储库的钩子”:
- 将此行添加到
文件中的rc
块中(如果尚未存在),或者取消注释(如果它已存在并已注释掉):%RC
LOCAL_CODE => "$rc{GL_ADMIN_BASE}/local",
取消注释
文件中的 'repo-specific-hooks
' 行,或者将其添加到rc
列表(如果不存在)。ENABLE
如果您的
文件没有rc
列表,您需要将其添加到ENABLE
和POST_COMPILE
列表中。 单击此处了解有关这一切的更多信息。POST_CREATE
将钩子放入
克隆中,如下所示:gitolite-admin
# on your workstation
cd /path/to/your/gitolite-admin-clone
mkdir -p local/hooks/repo-specific
现在将您的钩子添加到该目录,但不使用 git“标准”名称(
、pre-receive
、post-receive
),而是使用描述性名称(例如“post-update
”、“deploy
”) ”等)。RSS-post
将它们添加到您希望它们处于活动状态的存储库中,在您的conf文件中。例如:
repo foo
option hook.post-update = jenkins
repo bar @baz
option hook.post-update = deploy RSS-post
- 添加、提交并推送管理存储库。
我在 debian bullseye 上使用 gitolite3 (3.6.12-1)。这是我设置
post-receive
钩子的方法:
编辑
/etc/gitolite3/gitolite.rc
。确保设置了 LOCAL_CODE:
LOCAL_CODE => "$ENV{HOME}/local"
接下来,转到
ENABLE
文件的 gitolite.rc
部分,然后取消注释 repo-specific-hooks
:
# allow repo-specific hooks to be added
'repo-specific-hooks',
更改为
gitolite3
用户,并创建钩子目录:
sudo su gitolite3
cd ~
mkdir -p local/hooks/repo-specific
这是我认为其他教程所遗漏的设置;你需要(或者至少我需要),重新运行
setup
:
sudo su gitolite3
gitolite setup
如果您没有正确设置,现在您会看到错误消息:
FATAL: repo-specific-hooks: '/git/local/hooks/repo-specific' does not exist or is not a directory
然后修复它,然后重新运行
gitolite setup
。
接下来,在您刚刚创建的
repo-specific
目录中,添加您的钩子脚本:
sudo su gitolite3
echo "#!/bin/bash" >> ~/local/hooks/repo-specific/hello
echo "echo hello world" >> ~/local/hooks/repo-specific/hello
chmod +x post-receive
修改
gitolite.conf
:
cd gitolite-admin
vim conf/gitolite.conf
将钩子添加到每个存储库,如下所示:
repo linux
option hook.post-receive = hello
...
推动改变并享受。