linux主机上搭建svn服务

linux主机上搭建svn服务

subversion官网:http://subversion.apache.org/

1. 安装

对于Debian系的:

测试安装是否成功:

一些非必须但推荐的准备工作:

2. 版本库

创建版本库:

如果删除版本库:

3. 配置文件

每个仓库成功创建后都会在仓库目录下的自动生成conf文件夹以及其内的三个配置文件(svnserve.conf, passwd, authz):

svn服务配置文件svnserve.conf

编辑示例:

用户名口令文件passwd

编辑示例:

权限配置文件authz

编辑示例:

4. svn服务

启动SVN服务:

查看SVN服务:

5. 防火墙端口

subversion的默认端口为3690,如果没有打开会报错。

对于使用 iptables 的:

6. 访问

经过上述配置的svn服务可以通过svn://ip/repo来访问。

ip为svn服务器主机的ip地址。

7. 多项目配置

subversion的目录结构是可以自由规划的,对于一个 subversion仓库的目录树,我们可以把任何一个目录认定为一个项目,从而只checkout这个目录下的所有文件进行编码。所以我们既可以在一个仓库内保存多个项目,也可以一个仓库保存一个项目而使用多个仓库。

7.1 单仓库

在本文上例中创建的仓库虽然只有一个,但是是属于多仓库的配置和启动方式,在访问时是通过ip+仓库名(上例中的svn://ip/repo)来访问的。

单个仓库在启动时只要将参数 -r 指定到对应仓库的根目录即可。如上例中:

此时只启动了repo一个仓库,其url为:svn://ip

需要注意的是,此时authz文件的设置需要稍作调整,否则在客户端会报认证失败的错误信息。

因为svnserve服务的启动目录已经是一个仓库,所以无需指定仓库名。

7.2 多仓库

新建一个目录作为所有仓库的父目录:

在repos目录下新建各个独立的svn仓库,并将该目录作为svnserve服务的启动目录:

此时,我们新建并启动了三个独立的svn仓库,其访问路径分别为:

7.3 多仓库共享配置

多个独立的仓库在创建后,均会生成自己的配置文件,互不干扰。可很多时候我们需要统一的用户和权限配置来管理多个仓库。

每个独立的仓库都有自己的主配置文件svnserve.conf,对于需要共享用户和权限配置的仓库,我们只需在主配置文件中将passwd和authz文件的路径指向同一个即可。

编辑示例,passwd文件:

编辑示例,authz文件:

编辑repo1和repo3仓库中conf文件夹中下的svnserve.conf文件,将passwd-db和authz-db指定为刚才编辑的通用配置文件。

编辑示例:

这样,启动svnserve后,repo1和repo3将使用同一套用户和权限配置信息。

如果所有的仓库都需要统一的配置,那么就可以不用逐个编辑单个仓库下的svnserve.conf文件,而在启动时使用指定配置文件即可:

这样,svnserve启动后将为所有仓库使用指定的配置文件而忽略各个仓库自己的配置文件。

8. 附subversion配置文件详解

1) svnserve配置文件概述

svnserve配置文件通常由3个文本文件组成:
svn服务配置文件,在仓库根目录下conf文件夹下,文件名为svnserve.conf
用户名口令文件,在文件svnserve.conf中指定,缺省为同目录下的passwd
权限配置文件,在文件svnserve.conf中指定,缺省为同目录下的authz

如下是一个svn仓库的目录结构:

2) svn服务配置文件

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

<配置项> = <值>

配置项分为以下5项:

【说明】版本库认证域
在使用svn客户端访问svnserve服务器时,若需要用户登录,则提示信息如下:

在上述第2行”Authentication realm: \<svn://localhost:3690>”之后显示的字符串为认证域名称。如果在配置文件中未设定认证域,就会提示一个UUID,如上述所示。
如果在配置文件中指定了如下配置项:

将在svn客户端提示如下:

例1:svn服务配置文件conf/svnserve.conf的内容如下:
[general]
anon-access = none
auth-access = write
password-db = ../../conf/passwd
authz-db = ../../conf/authz
realm = repo1

上述配置文件设定非鉴权用户无权限访问该版本库;鉴权用户可对版本库进行读写;用户名口令文件为相对版本库conf目录的文件”../../conf/passwd”;权限配置文件为相对版本库conf目录的文件”../../conf/authz”;版本库的认证域为”repo1″。

3) 用户名口令文件

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

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

<用户名> = <口令>

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

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

该文件中配置了两个用户,用户名分别为”admin”和”user”。其中”admin”用户的口令为”admin”;”user”用户的口令为”123456″。

4) 权限配置文件

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

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

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

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

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

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

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

其中,”*”表示任何用户;权限的取值范围为”、’r’和’rw’,”表示对该版本库路径无任何权限,’r’表示具有只读权限,’rw’表示有读写权限。
注意:每行配置只能配置单个用户或用户组。

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

在上述配置文件中,定义了一个用户组”g_admin”,该用户组包含用户”admin”和”thinker”。然后定义了2个版本库路径权限段。其中,版本库”repo1″只有用户组”g_admin”可读写,其他用户无任何权限;版本库”repo2″中路径”/home”只有用户”user”有读写权限,其他用户只有可读权限。

5) 总结

svnserve有3个配置文件。SVN管理员可以通过这3个配置文件设置svnserve服务的用户名口令,以及对版本库路径的访问权限。这些配置文件保存后就立即生效,不需要重启svnserve服务。
需要强调的是这些配置文件只对svnserve服务有效,即客户端通过前缀为svn://或svn+ssh://的URL访问版本库有效,而对通过前缀http://、https://或file:///的URL无效。

在 “linux主机上搭建svn服务” 上有 1 条评论

发表评论

电子邮件地址不会被公开。