Git Gitolite 配置文件和访问规则

安装结束后,你切换到gitolite-admin仓库(放在你的HOME目录)然后看看都有啥:

[code] cd ~/gitolite-admin/ ls
conf/ keydir/
find conf keydir -type f conf/gitolite.conf keydir/scott.pub cat conf/gitolite.conf

repo gitolite-admin
RW+ = scott

repo testing
RW+ = @all[/code]

注意 “scott” ( 之前用gl-setup 命令时候的 pubkey 名稱) 有读写权限而且在 gitolite-admin 仓库里有一个同名的公钥文件。

添加用户很简单。为了添加一个名为alice的用户,获取她的公钥,命名为alice.pub,然后放到在你工作站上的gitolite-admin克隆的keydir目录。添加,提交,然后推送更改。这样用户就被添加了。
gitolite配置文件的语法在conf/example.conf里,我们只会提到一些主要的。

你可以给用户或者仓库分组。分组名就像一些宏;定义的时候,无所谓他们是工程还是用户;区别在于你使用“宏”的时候

[code]@oss_repos = linux perl rakudo git gitolite
@secret_repos = fenestra pear

@admins = scott
@interns = ashok
@engineers = sitaram dilbert wally alice
@staff = @admins @engineers @interns[/code]

你可以控制许可在”ref“级别。在下面的例子里,实习生可以push ”int“分支。工程师可以push任何有"eng-"开头的branch,还有refs/tags下面用"rc"开头的后面跟数字的。而且管理员可以随便更改(包括rewind)对任何参考名。

repo @oss_repos RW int$ = @interns RW eng- = @engineers RW refs/tags/rc[0-9] = @engineers RW+ = @admins

在RWorRW+之后的表达式是正则表达式(regex)对应着后面的push用的参考名字(ref)。所以我们叫它”参考正则“(refex)!当然,一个refex可以比这里表现的更强大,所以如果你对perl的正则表达式不熟的话就不要改过头。

同样,你可能猜到了,Gitolite字头refs/heads/是一个便捷句法如果参考正则没有用refs/开头。

一个这个配置文件语法的重要功能是,所有的仓库的规则不需要在同一个位置。你能报所有普通的东西放在一起,就像上面的对所有oss_repos的规则那样,然后建一个特殊的规则对后面的特殊案例,就像:

repo gitolite RW+ = sitaram

那条规则刚刚加入规则集的 gitolite 仓库.

这次你可能会想要知道访问控制规则是如何应用的,我们简要介绍一下。

在gitolite里有两级访问控制。第一是在仓库级别;如果你已经读或者写访问过了任何在仓库里的参考,那么你已经读或者写访问仓库了。

第二级,应用只能写访问,通过在仓库里的branch或者tag。用户名如果尝试过访问 (W或+),参考名被更新为已知。访问规则检查是否出现在配置文件里,为这个联合寻找匹配 (但是记得参考名是正则匹配的,不是字符串匹配的)。如果匹配被找到了,push就成功了。不匹配的访问会被拒绝。

REF:http://cwiki.ossez.com/display/RevisionControl/Gitolite