30.5.2 通配符版本库,管理员通过推送创建

通配符版本库是用正则表达式语法定义的版本库,所指的并非某一个版本库而是和名称相符的一组版本库。要想使用通配符版本库,需要在服务器端Gitolite的安装用户(如git)主目录下,修改配置文件.gitolite.rc,使其包含如下配置:


$GL_WILDREPOS=1;


使用通配符版本库,可以对一组版本库进行授权,非常有效。但是版本库的创建则不像前面介绍的那样,不会在授权文件推送到服务器时创建,而是由拥有版本库创建授权(C)的用户手工进行创建。

对于用通配符设置的版本库,用C指令指定能够创建此版本库的管理员(拥有创建版本库的授权)。例如:


repo ossxp/.+

C=jiangxin

RW=dev1 dev2


管理员jiangxin可以创建路径符合正则表达式"ossxp/.+"的版本库,用户dev1和dev2对版本库具有读写(但是没有强制更新)权限。

使用该方法创建版本库后,创建者的uid将被记录在版本库目录下的gl-creator文件中。该账号具有对该版本库最高的权限。该通配符版本库的授权指令中如果出现CREATOR将被创建者的uid替换。

本地建库。


$mkdir somerepo

$cd somerepo

$git init

$git commit—allow-empty


使用git remote指令设置远程版本库。


$git remote add origin jiangxin-server[1]:ossxp/somerepo.git


运行git push完成在服务器端版本库的创建。


$git push origin master


Gitolite的原始实现是通配符版本库的管理员在对不存在的版本库执行clone操作时自动创建的。但是我认为这不是一个好的实践,经常会因为在克隆时把URL写错,从而导致在服务器端创建垃圾版本库。因此我重新改造了gitolite通配符版本库创建的实现方法,改为在对版本库进行推送的时候进行创建,而clone一个不存在的版本库会报错退出。

[1]jiangxin-server是设置的别名主机,是以jiangxin用户的公钥访问server服务器。