svnserve是SVN自带的一个轻型服务器,客户端通过使用以svn://或svn+ssh://为前缀的URL来访问svnserve服务器,实现远程访问SVN版本库。

svnserve可以通过配置文件来设置用户和口令,以及按路径控制版本库访问权限。本文详细分析了svnserve配置文件格式,并说明如何使用配置文件控制版本库访问权限。

本文介绍SVN的版本为1.7.14。

  1. svnserve配置文件概述

svnserve配置文件通常由以下3个文本文件组成:

svn服务配置文件,该文件版本库目录的conf目录下,文件名为svnserve.conf。
用户名口令文件,该文件名在文件svnserve.conf中指定,默认为同目录下的passwd。
权限配置文件,该文件名也在文件svnserve.conf中指定,默认为同目录下的authz。

  1. svn服务配置文件

svn服务配置文件为版本库目录中的文件conf/svnserve.conf。该文件仅由一个[general]配置段组成。

[general]配置段中配置行格式如下:

<配置项> = <值>

配置项分为以下5项:

anon-access 控制非鉴权用户访问版本库的权限。取值范围为”write”、”read”和”none”。
即”write”为可读可写,”read”为只读,”none”表示无访问权限。
默认值:read

auth-access 控制鉴权用户访问版本库的权限。取值范围为”write”、”read”和”none”。
即”write”为可读可写,”read”为只读,”none”表示无访问权限。
默认值:write

password-db 指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf
目录的相对路径。
默认值:passwd

authz-db 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。
除非指定绝对路径,否则文件位置为相对conf目录的相对路径。
默认值:authz

realm 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的
认证域相同,建议使用相同的用户名口令数据文件。
默认值:一个UUID(Universal Unique IDentifier,全局唯一标示)。
BashCopy
【说明】版本库认证域
在使用svn客户端访问svnserve服务器时,若需要用户登录,则提示信息如下:

[root@test root]# svn list svn://192.168.3.45/test
Authentication realm: svn://192.168.3.45:3690 0d545a49-4038-0410-99b4-c66dc73f754e
Password for ‘root’:
BashCopy
在上述第2行”Authentication realm: svn://192.168.3.45:3690”之后显示的字符串为认证域名称。如果在配置文件中为设定认证域,就会提示一个UUID,如上述所示。

如果在配置文件中指定了如下配置项:

realm = test

将在svn客户端提示如下:

[root@test root]# svn list svn://192.168.3.45/test
Authentication realm: svn://192.168.3.45:3690 test
Password for ‘root’:
BashCopy
例1:svn服务配置文件conf/svnserve.conf的内容如下:

[general]
anon-access = none
auth-access = write
password-db = ../../conf/passwd
authz-db = ../../conf/authz
realm = test
BashCopy
上述配置文件设定非鉴权用户无权限访问该版本库;鉴权用户可对版本库进行读写;用户名口令文件为相对版本库conf目录的文件”../../conf/passwd”;权限配置文件为相对版本库conf目录的文件”../../conf/authz”;版本库的认证域为”test”。

  1. 用户名口令文件

用户名口令文件由svnserve.conf的配置项password-db指定,默认为conf目录中的passwd。该文件仅由一个[users]配置段组成。

[users]配置段的配置行格式如下:

<用户名> = <口令>

注意:配置行中的口令为未经过任何处理的明文。

例2:用户名口令文件conf/passwd的内容如下:

[users]
admin = admin
thinker = 123456
BashCopy
该文件中配置了两个用户,用户名分别为”admin”和”thinker”。其中”admin”用户的口令为”admin”;”thinker”用户的口令为”123456”。

  1. 权限配置文件

权限配置文件由svnserve.conf的配置项authz-db指定,默认为conf目录中的authz。该配置文件由一个[groups]配置段和若干个版本库路径权限段组成。

[groups]配置段中配置行格式如下:

<用户组> = <用户列表>

用户列表由若干个用户组或用户名构成,用户组或用户名之间用逗号”,”分隔,引用用户组时要使用前缀”@”(如:引用用户组”all”要使用字符串”@all”)。

版本库路径权限段的段名格式如下:

[<版本库名>:<路径>]

如版本库abc路径/tmp的版本库路径权限段的段名为”[abc:/tmp]”。

可省略段名中的版本库名。若省略版本库名,则该版本库路径权限段对所有版本库中相同路径的访问控制都有效。如:段名为”[/tmp]”的版本库路径权限段设置了所有引用该权限配置文件的版本库中目录”/tmp”的访问权限。

版本库路径权限段中配置行格式有如下三种:

<用户名> = <权限>
<用户组> = <权限>

  • = <权限>
    BashCopy
    其中,”*”表示任何用户;权限的取值范围为’’、’r’和’rw’,’’表示对该版本库路径无任何权限,’r’表示具有只读权限,’rw’表示有读写权限。

注意:每行配置只能配置单个用户或用户组。

例3:权限配置文件conf/authz的内容如下:

[groups]
g_admin = admin,thinker

[admintools:/]
@g_admin = rw

  • =

[test:/home/thinker]
thinker = rw

  • = r
    BashCopy
    在上述配置文件中,定义了一个用户组”g_admin”,该用户组包含用户”admin”和”thinker”。然后定义了2个版本库路径权限段。其中,版本库”admintools”只有用户组”g_admin”可读写,其他用户无任何权限;版本库”test”中路径”/home/thinker”只有用户”thinker”有读写权限,其他用户只有可读权限。
  1. 总结

在本文中,详细介绍了svnserve程序的3个配置文件。SVN管理员可以通过这3个配置文件设置svnserve服务的用户名口令,以及对版本库路径的访问权限。这些配置文件保存后就立即生效,不需要重启svnserve服务。

需要强调的是本文介绍的配置文件只对svnserve服务有效,即客户端通过前缀为svn:// 或svn+ssh:// 的URL访问版本库有效,而对通过前缀http:// 、https:// 或file:/// 的URL无效。

一、SVN版本库迁移


当因为内存限制或者其他某些原因,我们需要将svn版本从一个服务器A迁移到另外一个服务器B时,如果我们单纯的只是将svn版本从服务器A check out后将文件重新放到服务器B,将会缺失SVN原有的日志信息等内容。
linux环境下SVN服务器的安装方式请参考:http://blog.csdn.net/baiqishijkh/article/details/77507201
当我们需要保留原服务器上所有的SVN日志信息等时,采用如下步骤来实现:
1、在服务器A下,存储版本 svnadmin dump /home/svn > svn_dump
其中 /home/svn 为原SVN仓库(svn标识仓库名), svn_dump 为我们所备份出来的整个仓库信息
2、将服务器A中备份出来的 svn_dump文件拷贝至服务器B
3、在服务器B中,从仓库备份中还原仓库内容 svnadmin load /home/svn_new < /home/svn_dump
其中 /home/svn_new 为新的SVN仓库(svn_new标识仓库名),svn_dump为服务器A拷贝而来的仓库备份
至此我们就实现了SVN版本的迁移,保留了原服务器下的svn仓库的所有信息。

二、更改工作副本服务器地址


SVN 服务器 IP 地址改变后,工作副本对服务器的连接可以采用以下的方法重定位:
1、Windows(tortoiseSVN)
在工作副本上右键,选择TortoiseSVN->relocation,再输入新的URL。
SVN - 图1
2、Linux
重新定位命令:svn switch —relocate 原svn地址 新svn地址
例:
svn switch —relocate “http://192.168.10.21/bin“ “http://192.168.8.230/bin

即完成。
注意事项:
修改过程中需保证两边svn服务器代码版本相同,即版本库迁移完后不要在旧的服务器上进行提交代码操作

1、安装软件
yum -y install subversion
2、查看安装版本
svnserve —version
3、创建SVN版本库目录
mkdir -p /data/svnroot
4、创建版本库
svnadmin create /data/svnroot/tingyiqu
svnadmin create /data/svnroot/bbs
svnadmin create /data/svnroot/blog
5、将其中一个仓库下的passwd和authz文件复制到/data/svnroot下面,并且设置密码和权限
密码格式
[users] harry = harryssecret sally = sallyssecret wuqiyin = wuqiyin123456 blog_wuqiyin = blog_wuqiyin123456 bbs_wuqiyin = bbs_wuqiyin123456

权限格式
[groups] harry_and_sally = harry,sally harry_sally_and_joe = harry,sally,&joe admin = wuqiyin blogadmin = blog_wuqiyin bbsadmin = bbs_wuqiyin tingyiquadmin = tingyiqu_wuqiyin [blog:/] @admin = rw @blogadmin = rw @bbsadmin = r @tingyiquadmin = r [tingyiqu:/] @admin = rw @tingyiquadmin = rw @bbsadmin = r @blogadmin = r [bbs:/] @admin = rw @bbsadmin = rw @blogadmin = r

6、设置每个仓库下的svnserve.conf
anon-access = none auth-access = write password-db = /data/svnroot/passwd realm = blog

7、启动svn版本库
svnserve -d -r /data/svnroot/ #启动到根目录,然后在svn地址后面加上仓库名就好了
8、如果要在其他机器访问该版本库,还要开启3690端口
9、停止svn
kill 9 pid
10、常用命令
检出
svn co svn://路径(目录或文件的全路径) [本地目录全路径] #回车后提示输入账号密码
更新文件
svn update
svn update -r 修正版本 文件名
svn update 文件名
查看日志
svn log 文件名
查看文件详细信息
svn info 文件名
帮助
svn help
svn help update

以上内容来自 http://hzfblog.com/article/5