gitolite_管理挂钩和镜像
我想知道是否有一种简单的方法可以使用gitolite_admin为某些repo安装钩子 让我们想象一下,我想使用gitolite_adminrepo将post updatehook for repoawesome克隆到我的工作站上gitolite_管理挂钩和镜像,gitolite,Gitolite,我想知道是否有一种简单的方法可以使用gitolite_admin为某些repo安装钩子 让我们想象一下,我想使用gitolite_adminrepo将post updatehook for repoawesome克隆到我的工作站上 #conf/gitolite_conf repo awesome RW+ = deployer 更新后的内容: 除年代外,最近(2013年8月29日)推出了回购特定挂钩: 它基本上只是在/hooks中创建一个符号链接,指向$rc{
#conf/gitolite_conf
repo awesome
RW+ = deployer
更新后的内容:
除年代外,最近(2013年8月29日)推出了回购特定挂钩:
它基本上只是在/hooks
中创建一个符号链接,指向$rc{LOCAL_code}/hooks/repo-specific
中的某个文件(除了gitolite-admin-repo)
但是,您不能为gitolite admin
指定钩子。您的钩子只是以下三个授权钩子之一:
预接收
post-receive
更新后
- 在您的
gitolite admin/hooks/repo-specific/xx中存储您的回购特定挂钩
- 在服务器上的
选项中声明这些内容gitolite admin local
ENABLE => [
# allow repo-specific hooks to be added
# 'repo-specific-hooks',
然后在服务器上声明钩子gitolite admin
repo:
gitolite git-config gitolite-options.hook=reponame hookname scriptname
(在reponame-hookname-scriptname
之间有一个选项卡或\t)
原始答复: 正如在报告中提到的 如果只想在少数特定存储库中安装钩子,请直接在服务器上安装 (否则,您将管理所有git回购的挂钩) 也就是说,您可以利用GitoliteV3.x中的更新挂钩:这些挂钩可以为某些回购协议和某些用户设置,就像任何其他规则一样。
然后你可以:
- 使您的
脚本在正在更新的相应裸git repo中保留一个“标志”(文件)VREF
- 制作一个通用的“
”deploy
hook,它将首先查找该标志,如果找到,则部署repo(并移除该标志)post-update
- 通过gitolite admin管理的更新后钩子只能是所有git回购的公用钩子(不是您想要的)
- 只有VREF可以通过gitolite.conf与回购协议和用户关联
deploy
脚本,并通过gitolite admin
repo的gitolite.conf
config文件进行管理。您还可以查看“”
一种特殊形式的选项语法可用于设置特定于repo的环境变量,这些变量对gitolite触发器和您可能安装的任何git挂钩都可见
例如,假设您安装了启动CI作业的更新后挂钩。当然,默认情况下,这个钩子对于所有gitolite管理的回购都是活动的。然而,您只希望它运行于某些特定的回购协议,比如r1、r2和r4
为此,首先将其添加到gitolite.conf
:
这将在调用任何触发器或挂钩之前创建一个名为GL_OPTION_CI的环境变量,其值为1
注意:选项名称必须以ENV.
开头,后跟由字母、数字和下划线组成的字符序列
现在,运行CI作业的钩子可以轻松决定要执行的操作:
当然,你也可以做相反的事情;i、 e.决定列出的回购不应运行CI作业,但所有其他回购应:
该功能相当新(于年开始,但在本例中,3.5.2于2013年6月完成)。
但即使您没有这个版本,也有其他方法可以使用选项变量来实现这一点,正如该部分最后一部分所解释的 在添加此功能之前,您仍然可以通过在钩子代码中使用
gitolit git config
命令来测试为repo设置的选项和配置,如:
您也可以用同样的方式使用git配置变量。或者您可以使用组成员身份--有关详细信息,请参阅“”中的注释
# in_group()
# return true if $ENV{GL_USER} is set and is in the given group
# shell equivalent
# if gitolite list-memberships $GL_USER | grep -x $GROUPNAME >/dev/null; then ...
以下是对@VonC答案的逐步补充说明
Gitolite中的最新提交似乎引入了repo-specific钩子:请参阅
repo r1 r2 r4
option ENV.CI = 1
# exit if $GL_OPTION_CI is not set
[ -z $GL_OPTION_CI ] && exit
... rest of CI job code as before ...
repo @all
option ENV.CI = 1
repo r1 r2 r4
option ENV.CI = ""
if gitolite git-config -q reponame gitolite-options.option-name
then
...
# in_group()
# return true if $ENV{GL_USER} is set and is in the given group
# shell equivalent
# if gitolite list-memberships $GL_USER | grep -x $GROUPNAME >/dev/null; then ...