30.3.3 版本库ACL

一个版本库可以包含多条授权指令,这些授权指令组成了一个版本库的权限控制列表(ACL)。例如:


repo testing

RW+=jiangxin@admin

RW=@dev@test

R=@all


1.版本库

每一个版本库授权都以一条repo指令开始。

指令repo后面是版本库列表,版本之间用空格分开,还可以包括版本库组。

注意:版本库名称不要添加.git后缀。在版本库创建过程中会自动添加.git后缀。


repo sandbox/test1 sandbox/test2@test_repos


用repo指令设置的版本库会自动在服务器上创建,但是如果repo指令后面的版本库名称中包含通配符,则不会自动创建。

repo指令后面的版本库名称中可以使用正则表达式,这种用正则表达式定义的版本库称为通配符版本库。

在Gitolite对用户访问版本库名称进行匹配时,会自动给看似通配符版本库的名称加上前缀^和后缀$。这一点和后面将要介绍的正则引用(refex)大不一样。


repo ossxp/.+


不过有时候使用了过于简单的正则表达式,如"myrepo.",有可能会产生歧义,让Gitolite将希望用正则表达式表示的通配符版本库误判为普通版本库名称,在服务器端自动创建名为myrepo..git的版本库。解决歧义的一个办法是:在正则表达式的前面明确地插入^符号,或者在表达式后面添加$符号,形如:"^myrepo."、"myrepo.$",或"^myrepo.$"。

2.授权指令

在repo指令之后是缩进的一条或多条授权指令。授权指令的语法如下:


<权限>[零个或多个正则表达式匹配的引用]=<user>[<user>…]


每条指令必须指定一个权限。权限可以用下面任意一个权限关键字:


C、R、RW、RW+、RWC、RW+C、RWD、RW+D、RWCD、RW+CD。


权限后面包含一个可选的正则引用(refex)列表。

正则表达式格式的引用,简称正则引用(refex),对Git版本库的引用(分支、里程碑等)进行匹配。

如果在授权指令中省略正则引用,则意味着对全部的Git引用(分支、里程碑等)都有效。正则引用如果不以refs/开头,会自动添加refs/heads/作为前缀。

正则引用如果不以$结尾,则意味着后面可以匹配任意字符,相当于添加.*$作为后缀。

权限后面也可以包含一个以NAME/为前缀的路径列表,进行基于路径的授权。

授权指令以等号(=)为标记分为前后两段,等号后面的是用户列表。用户之间用空格分隔,并且可以使用用户组。

3.授权关键字

不同的授权关键字有不同的含义,有的授权关键字只用在特定的场合。

C

C代表创建。仅在通配符版本库授权时可以使用。用于指定谁可以创建与通配符匹配的版本库。

R、RW和RW+

R为只读。RW为读写权限。RW+含义为除了具有读写权限外,还可以强制执行非快进式推送。

RWC、RW+C

只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等)时,才可以使用该授权指令。其中C的含义是允许创建和正则表达式匹配的引用(分支或里程碑等)。加号(+)的含义是允许强制推送。

RWD、RW+D

只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等)时,才可以使用该授权指令。其中D的含义是允许删除和正则表达式匹配的引用(分支或里程碑等),加号(+)的含义是允许强制推送。

RWCD、RW+CD

只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等)时,才可以使用该授权指令。其中C的含义是允许创建和正则表达式匹配的引用(分支或里程碑等),D的含义是允许删除和正则表达式匹配的引用(分支或里程碑等),加号(+)的含义是允许强制推送。