svn 服务器搭建实践

本贴最后更新于 2664 天前,其中的信息可能已经沧海桑田

SVN 服务器搭建实践

本着爱折腾的精神,搭建了 svn 服务器。

什么是 svn?

Apache Subversion(简称 SVN,svn),一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。互联网上很多版本控制服务已从 CVS 转移到 Subversion。 ---维基百科

搭建环境

aliyun:CentOS Linux release 7.3.1611 (Core) 注意:需要在阿里云控制面板安全组管理中开启 svn 默认端口 3690 的访问权限。

详细过程

安装 svn

使用 yum 安装

yum -y install subversion

检查版本

svn --version

设置开机启动

systemctl enable svnserve.servicesystemctl enable svnserve

配置 svn

配置 svn 目录

mkdir /home/svn 这里我把它放在 /home/svn 目录下。

新建版本仓库

svnadmin create /home/svn/project

仓库下文件目录简介

  • conf 存放版本库的配置文件,包括 authz,passwd,svnserve.conf
  • db 存放着 Subversion 所要管理的所有受版本控制的数据,不同的存储方式(Berkeley DB 或者 FSFS)下有着不同的目录结构,不过我们一般不用直接修改和查看这个目录下的内容,Subversion 的命令可以安全的操作这个目录。
  • hooks 存放着钩子脚本及其模版(一种版本库事件触发程序)。
  • locks 存放着 Subversion 版本库锁定数据。
  • format 记录了版本库的布局版本号。
  • README.txt 这个就不多说了,自行阅读。

配置用户名密码

passwd 用户名和密码

非常简单,使用 username = passwd 格式就可以了。

配置权限

authz 资源访问权限

该配置文件由一个 [groups] 配置段和若干个版本库路径权限段组成。

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

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

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

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

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

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

可省略段名中的版本库名。若省略版本库名,则该版本库路径权限段对所有版本库中相同路径的访问控制都有效。

如:段名为 "[/tmp]" 的版本库路径权限段设置了所有引用该权限配置文件的版本库中目录 "/tmp" 的访问权限。

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

<用户名> = <权限>

<用户组> = <权限>

"*" = <权限>

其中,"*" 表示任何用户;权限的取值范围为 '''r''rw''' 表示对该版本库路径无任何权限,'r' 表示具有只读权限,'rw' 表示有读写权限。

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

示例配置:

[groups]
g_admin = admin,thinker
[admintools:/]
@g_admin = rw
* =
[test:/home/thinker]
thinker = rw
* = r

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

配置 svnserve

svnserve.conf 服务器配置

主要配置:

  1. anon-access 控制非鉴权用户访问版本库的权限。取值范围为 "write""read""none"
    "write" 为可读可写,"read" 为只读,"none" 表示无访问权限。
    缺省值:read,这里设置为 none

  2. auth-access 控制鉴权用户访问版本库的权限。取值范围为 "write""read""none"
    "write" 为可读可写,"read" 为只读,"none" 表示无访问权限。
    缺省值:write 这里设置为 write

  3. password-db 指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对 conf
    目录的相对路径。
    缺省值:passwd 这里设置为 passwd

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

  5. realm 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的
    认证域相同,建议使用相同的用户名口令数据文件。
    缺省值:一个 UUID(Universal Unique IDentifier,全局唯一标示)。
    这里建议设置为版本库名称

启动 svn

vi /etc/sysconfig/svnserveOPTIONS 改为 "-r /home/svn",即 svn仓库根目录

而后 systemctl start svnserveservice svnserve start

使用 systemctl status svnserve.service 查看服务启动状态。

使用 service svnserve stop 停止服务或者使用 ps aux|grep svnserve 后,kill 掉进程。

使用 service svnserve restart 重启服务。

使用客户端连接

windows 下载TortoiseSVN
mac os 下载Cornstone

然后 svn checkout

svn 的存储特性简介

特性 Berkeley DB FSFS
对操作中断的敏感 很敏感;系统崩溃或者权限问题会导致数据库“塞住”,需要定期进行恢复。 不敏感
可只读加载 不能 可以
存储平台无关 不能 可以
可从网络文件系统访问 不能 可以
版本库大小 稍大 稍小
扩展性:修订版本树数量 无限制 某些本地文件系统在处理单一目录包含上千个条目时会出现问题。
扩展性:文件较多的目录 较慢 较慢
检出最新代码的速度 较快 可以
大量提交的速度 较慢,但时间被分配在整个提交操作中 较快,但最后较长的延时可能会导致客户端操作超时
组访问权处理 对于用户的 umask 设置十分敏感,最好只由一个用户访问。 对 umask 设置不敏感
功能成熟时间 2001 年 2004 年

总结

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

  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 680 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...