搭建一个SVN服务器,主要用于代码、文件等的版本控制。
通常有两种配置方式,一种是结合apache服务器,给apache添加SVN模块,修改配置,重启服务,这种方式相对复杂,但能提供多种认证,能建立一套安全的版本控制环境;另外一种是使用独立服务器,svnserve,这种方式简单暴力。除了环境本身的配置文件,apache的诸如httpd.conf, apache.conf,svnserve本身的svnserve.conf之外,SVN的权限管理文件的配置形式大体上一致。
以svnserve为例,配置文件可启用一个配置文件authz管理所有仓库的配置,也可以配置成一个配置文件管理一个仓库的模式。这里简化,只介绍一个文件配置一个仓库的情况。
authz的常见格式有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
对于组的定义[groups]
有几点说明:
- 组的等价定义是一种包含关系,如上文,组group3包含了用户user1, user2, user6,在目录权限
[/trunk]
中,组拥有读写权限,表示此目录对用户user1, user2, user6开放;
- 组的等价定义是一种包含关系,如上文,组group3包含了用户user1, user2, user6,在目录权限
- 组包含了另外一个等价组,当另外一个组没有定义时,配置文件不合法
- 组之间若有相互引用,换言之,组不能被解析尽,则配置文件不合法, 如下所示
1 2 3 4 |
|
同理,当权限定义中, 某个路径指定了某个组没有定义,配置文件也不合法?
关于大小写,尝试了某个版本,发现:
- 路径是大小写区分的
- 用户是大小写区分的
- 组是大小写不区分的
此外,路径必须要是绝对路径,以’/‘开头,否则,配置文件失效。 配置文件失效的时候,在客户端连接SVN服务器的时候能够得到’invalid authz’的提示。
测试过程
1 2 3 4 5 6 7 |
|
如上文,出现了两次关于SVN的路径定义会覆盖?
大多数的SVN服务器版本来说,配置文件中路径的定义并没有先后之分,被引用组的定义甚至可以出现在被引用之后,而与在之前定义并无二义。但是对于某些较早时代的版本与现代的版本有较大差异,部分SVN配置文件对于父子目录的权限控制有相关关系。此是后话。