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的含义是允许删除和正则表达式匹配的引用(分支或里程碑等),加号(+)的含义是允许强制推送。