svnserve 配置

2.1 创建仓库
2.1.1 创建仓库存放目录
# mkdir -p /opt/svn/{repos,etc}

2.1.2 创建SVN仓库
# svnadmin create /opt/svn/repos/source1
# svnadmin create /opt/svn/repos/source2
# chown -R svn:svn /opt/svn/

仓库名称可以根据自己的规划或喜好设定。

2.2 配置仓库
SVN的svnserve对于每个仓库,有一个独立的配置文件和独立的用户、权限管理。
在这里仍然要保持配置文件svnserve.conf的独立,但是用户、权限管理是用统一的一个文件来存储。
这样方便以后的管理和维护。
另外要注意,即使svnserve服务已经运行,修改配置文件或者用户、权限管理文件,保存后马上生效,不需要重启服务。

2.2.1 配置source1仓库
进入仓库目录
# cd /opt/svn/repos/source1
2.2.2 修改配置
你可以直接删除默认的svnserve.conf文件,然后使用下面的配置:
# vi svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/etc/svn-user.conf
authz-db = /opt/svn/etc/svn-authz.conf
realm = My First Repository

说明:
anon-access = none #不允许匿名用户访问
auth-access = write #通过验证的用户可以读和写
password-db = /opt/svn/etc/svn-user.conf #用户保存文件
authz-db = /opt/svn/etc/svn-authz.conf #权限管理文件
realm = My First Repository #仓库名称

2.2.3 配置source2仓库
# cd /opt/svn/repos/source2
2.2.4 修改配置
你可以直接删除默认的svnserve.conf文件,然后使用下面的配置:
# vi svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/etc/svn-user.conf
authz-db = /opt/svn/etc/svn-authz.conf
realm = My Second Repository

如果有更多的仓库,可以类推配置。

----------------------------------------------------------------------
svnserve.conf的原始内容:

..............................略
----------------------------------------------------------------------

3 用户及权限管理

3.1 用户管理3.1.1 创建用户存储文件
# vi /opt/svn/etc/svn-user.conf
3.1.2 设置用户帐号
[users]
harry = harryssecret
sally = sallyssecret
bote = botessecret

说明:
[users] #是必须的,标记为用户配置开始
harry = harryssecret # harry 是用户名 , harryssecret是密码。注意,是明文密码
sally = sallyssecret # 同上
bote = botessecret # 同上

往后所以仓库的用户都在这里记录就可以了。至于那个用户,允许访问那个仓库,在权限管 理里限制。

3.2 权限管理3.2.1 创建权限管理文件
# vi /opt/svn/etc/svn-authz.conf
3.2.1 设置权限管理
[groups]
source1 = harry
source2 = sally

[source1:/]

@source1 = rw
@source2 = r


[source2:/]
@source2 = rw
bote = rw

一些提示权限错误的问题

为什么我的客户端没有写权限?
为什么我的权限没有起作用?

总结他们的配置,发现
都是用svnserve作为服务器,
都在svnserve.conf中使用了authz-db选项

原因可能如下:

1,配置authz时,没有注意svnserve启动参数-r所指定的目录。
这里有两种情况:
A:-r直接指定到版本库(称之为单库svnserve方式)
比如,有一个库project1,位于D:\svn\project1
使用以下命令启动svnserve

CODE:
svnserve -d -r D:\svn\project1

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

CODE:
[groups]
admin=user1
dev=user2
[project1:/]
@admin=rw
@doc=r

应该配置成

CODE:
[groups]
admin=user1
dev=user2
[/]
@admin=rw
@doc=r

因为[project1:/]表示库project1的根目录,而按上面的启动参数,是没有库的概念的。

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

CODE:
svnserve -d -r D:\svn

这种情况,一个svnserve可以为多个版本库工作,
这时如果想限制指定库的指定目录,就应该指定具体的库,像这样

CODE:
[groups]
admin=user1
dev=user2
[project1:/]
@admin=rw
@doc=r

如果此时你还用[/],则表示所有库的根目录,同理,[/src]表示所有库的根目录下的src目录

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

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

修改conf\authz文 件如下,主要是路径的修改:

[groups]
g_vip = morson
g_manager = michael
g_beijing = scofield
g_shanghai = lincon
g_headquarters = rory, linda
g_docs = linda
#这里多加了一个根目录的权限控制描述
[/]
@g_manager = rw
* =

#以下部分对路径做了一些修改
[/arm]
@g_manager = rw
* = r

[/arm/diary/headquarters]
@g_manager = rw
@g_headquarters = rw
@g_vip = r
* =

[/arm/diary/beijing]
@g_manager = rw
@g_beijing = rw
@g_vip = r
* =

[/arm/diary/shanghai]
@g_manager = rw
@g_shanghai = rw
@g_vip = r
* =

[/arm/ref]
@g_manager = rw
@g_docs = rw
* = r

[arm:/temp]
* = rw经过这样的修改后,访问时不会再报没有权限的错误,可以定制自己的权限控制了。 中文目录权限的控制

使用 UltraEdit 将 authz.conf 文件转换成不带 BOM 的 UTF-8 格式

Subversion对中文目录的支持是非常好的,按照文章中的方法,可以很轻松的进行中文目录的权限控制,
当然,在保存authz文件时一定不要忘记选择保存为“UTF-8 无BOM”。
原文地址:https://www.cnblogs.com/danghuijian/p/4400370.html