您的位置:首页 > 运维架构 > Linux

在linux上面搭建svn服务器遇到的一些问题和想法

2014-01-21 11:56 429 查看
昨天在centos上面搭建了svn服务器,其中遇到了一些问题,以及在设置authz 上面的一些想法,在这里和大家分享一下,希望能对大家有一些帮助。

遇到的问题:
在安装完成后输入用户名和密码,报错为:Option expected 是因为在配置svnserv.conf 时,删除了设置项前面的“#”号,但是行的前面还是有空格的,删除空格就不会报错误了。

版本库的创建:
在创建版本库的时候会有两种设想,
a.在一个仓库下面创建多个子目录,来控制不同项目的版本。这样设置一套passwd和authz 文件就可以控制所有项目中人员的权限。但是这样层次比较混乱,容易出错。
b.每个项目都创建一个一个版本库,每个版本库中都要设置passwd和authz 文件,来控制用户和权限,相对上面的方法来说,麻烦一点,但是层次清晰很多。

查阅了一些大能的看法,比较偏向于b 种的方法,因为 Subversion的每次commit都会导致整个仓库 版本号增加一个,会使得 多个项目的版本号出现断层。而且如果多个项目参与人不同,就必须使用apache2进行细粒度的权限控制,不是太方便。一个仓库一个项目,显得更优雅一些。

还有一方法我感觉比较好,有b 方案的层次清晰,也有a 方案的管理方便,赞一个,O(∩_∩)O~
使用svnserve时,为了管理的方便,应该使用相同的认证和授权文件,所以应该让所有版本库的配置文件svnserve.conf指向同一个password-db和authz-db文件。下面是一个多版本库的目录:D:/SVNROOT├─project1│├─conf│├─dav│├─db││├─revprops││├─revs││└─transactions│├─hooks│└─locks└─project2├─conf├─dav├─db│├─revprops│├─revs│└─transactions├─hooks└─locksD:/SVNROOT下有两个目录project1和project2,都已经创建了版本库,所以我们修改每个conf目录下的svnserve.conf,使之指向同一个password-db和authz-db文件。password-db = ../../passwdauthz-db = ../../authz
设置authz 的权限:
经过测试,首先要注意在根目录和下层子目录有递归的权限关系,也有是根目录有“读”的权限,那么子目录即使设置了“写”的权限,也是不可能别写入的,但是在查的一些资料里面和我的试验有点分歧,如果哪位兄台知道,还请多多指教。
还有就是在书写方面:
1,配置authz时,没有注意svnserve启动参数-r所指定的目录。

A:-r直接指定到版本库(称之为单库svnserve方式)
比如,有一个库project1,位于D:\svn\project1
使用以下命令启动svnservesvnserve -d -r D:\svn\project1

在这种情况下,一个svnserve只能为一个版本库工作
authz文件如果配置成下面这样就是错的,
[groups]
admin=user1
dev=user2

[project1:/]
@admin=rw
@dev=r

应该配置成
[groups]
admin=user1
dev=user2
[/]
@admin=rw
@dev=r

因为[project1:/]表示库project1的根目录,而按上面的启动参数,是没有库的概念的。
使用类似这样的URL:svn://192.168.0.1/ 即可访问project1

B:-r指定到版本库的上级目录(称之为多库svnserve方式)
同样,有一个库project1,位于D:\svn\project1
如果使用以下命令启动svnserve
svnserve -d -r D:\svn

这种情况,一个svnserve可以为多个版本库工作,
这时如果想限制指定库的指定目录,就应该指定具体的库,像这样
[groups]
admin=user1
dev=user2
[project1:/]
@admin=rw
@dev=r

如果此时你还用[/],则表示所有库的根目录,同理,[/src]表示所有库的根目录下的src目录
使用类似这样的URL:svn://192.168.0.1/project1 即可访问project1
这样的URL:svn://192.168.0.1/project2 即可访问project2

2,对中文目录进行权限控制时,没有将权限文件authz改为utf-8格式。

svn对于非英文文件名和目录名使用utf-8格式编码处理,要对中文目录进行正确控制,
应该使用无BOM的utf-8格式,如何将默认的文件转为utf-8,
我使用的是UltraEdit的菜单"ASCII to UTF-8 (Unicode Editing)"。在UltraEdit的配置中,可以设置有无BOM

svn子目录权限设置:

svn不提供变更管理,是否可以通过对其子目录的权限设置来实现呢?authz文件中修改:
例如配置库名字:test,之下存在doc、trunk两个子目录,其中用户zhang只有doc子目录的读权限,则应如下设置:
[test:/doc]
zhang = r
注意此处切记[test:/doc/]是错误的写法,一定不能加入最后的“/”,否则,导出时提示权限不对。
本文出自 “努力的小虫” 博客,请务必保留此出处http://leehcstory.blog.51cto.com/5025136/1353381
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: