SVN是Subversion的简称,是一个开放源代码的版本控制系统,采用C/S模式。SVN有2中数据存储模式, 一是Berkeley DB 数据库中存放数据;二是使用普通文件,采用自定义的格式来储存,称为 FSFS
两种存储格式各有优缺点,如果需要使用FSFS,在创建版本库的时候加参数“--fs-type fsfs”即可。即:“svnadmin create --fs-type fsfs /data/svn/project”
特性 |
Berkeley DB |
FSFS |
对操作中断的敏感 |
很敏感;系统崩溃或者权限问题会导致数据库“塞住”,需要定期进行恢复 |
不敏感 |
可只读加载 |
不能 |
可以 |
存储平台无关 |
不能 |
可以 |
可从网络文件系统访问 |
不能 |
可以 |
版本库大小 |
稍大 |
稍小 |
扩展性:修订版本树数量 |
无限制 |
某些本地文件系统在处理单一目录包含上千个条目时会出现问题。 |
扩展性:文件较多的目录 |
较慢 |
较慢 |
检出最新代码的速度 |
较快 |
可以 |
大量提交的速度 |
较慢,但时间被分配在整个提交操作中 |
较快,但最后较长的延时可能会导致客户端操作超时 |
组访问权处理 |
对于用户的 umask 设置十分敏感,最好只由一个用户访问 |
对 umask 设置不敏感 |
功能成熟时间 |
2001 年 |
2004 年 |
安装SVN
环境:
Centos 7.2
Subversion 1.7.14
Apache 2.4.6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| [root@localhost ~] [root@localhost ~] svnserve, version 1.7.14 (r1542130) ··· [root@localhost ~] [root@localhost ~] [root@localhost ~] total 16 drwxr-xr-x 2 root root 51 May 31 00:17 conf drwxr-sr-x 6 root root 4096 May 31 00:17 db -r--r--r-- 1 root root 2 May 31 00:17 format drwxr-xr-x 2 root root 4096 May 31 00:17 hooks drwxr-xr-x 2 root root 39 May 31 00:17 locks -rw-r--r-- 1 root root 229 May 31 00:17 README.txt [root@localhost ~] [root@localhost conf] [users] jack = jackpass bob = bobpass [root@localhost conf] [aliases] [groups] admin = jack [/] @admin = rw [/svn_test] bob = r [root@localhost conf] [general] anon-access = none auth-access = write password-db = passwd authz-db = authz [sasl] [root@localhost conf]
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| [root@localhost ~] ··· Adding /tmp/svncode/svn_test/test9.txt Adding /tmp/svncode/svn_test/test1.txt Adding /tmp/svncode/svn_test/test10.txt Committed revision 1. [root@localhost ~] [root@localhost ~] 1 root May 31 00:25 ./ 1 root May 31 00:25 svn_test/ 1 root May 31 00:25 svn_uu/ [root@localhost ~] [root@localhost ~] root 2017-05-31 00:25:41 +0800 (Wed, 31 May 2017) 4 init [root@localhost ~] [root@localhost ~] / <0.0.r1/4948> svn_test/ <n-1.0.r1/2515> test2.txt <o-1.0.r1/697> test3.txt <r-1.0.r1/873> test4.txt <t-1.0.r1/1049> test5.txt <v-1.0.r1/1226> test6.txt <x-1.0.r1/1403> test7.txt <z-1.0.r1/1580> test8.txt <11-1.0.r1/1758> test9.txt <13-1.0.r1/1937> test1.txt <15-1.0.r1/340> test10.txt <17-1.0.r1/518> svn_uu/ <0-1.0.r1/4740> uu8.txt <j-1.0.r1/4016> uu9.txt <l-1.0.r1/4189> uu1.txt <2-1.0.r1/2638> uu10.txt <5-1.0.r1/2809> uu2.txt <7-1.0.r1/2982> uu3.txt <9-1.0.r1/3154> uu4.txt <b-1.0.r1/3326> uu5.txt <d-1.0.r1/3498> uu6.txt <f-1.0.r1/3670> uu7.txt <h-1.0.r1/3843> [root@localhost ~] [root@localhost ~] [root@localhost ~] tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 2054/svnserve [root@localhost ~] root 2078 1 0 00:34 ? 00:00:00 svnserve -d -r /data/svn/project/ root 2094 1126 0 00:37 pts/0 00:00:00 grep --color=auto svn [root@localhost ~] svnserve -d -r /data/svn/project/ [root@localhost ~]
|
SVN安装成功
安装Apache
通过 Http 协议可更方便的访问 Subversion 版本库,只需要打开浏览器,输入 URL 即可轻松的浏览整个版本库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [root@localhost ~] [root@localhost ~] Server version: Apache/2.4.6 (CentOS) Server built: Apr 12 2017 21:03:28 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost project] New password: Re-type new password: Adding password for user jack [root@localhost project] jack:$apr1$wqsFKPQo$XwD1nh1Y7OPX.62dQIMt.. [root@localhost project] [root@localhost project]
|
Apache与Subversion结合
由于 Subversion 需要版本化的控制,因此标准的 Http 协议不能满足需求。要让 Apache 与 Subversion 协同工作,需要使用 WebDAV(Web 分布式创作和版本控制)。WebDAV 是 HTTP 1.1 的扩展,关于 WebDAV 的规范和工作原理,参考:http://www.ietf.org/rfc/rfc2518.txt
为了使 Subversion 与 dav 模块通信,需要安装 mod_dav_svn 插件。默认情况下没有安装,至少我这里是这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| [root@localhost ~] [root@localhost modules] -rwxr-xr-x 1 root root 181336 Nov 21 2015 mod_dav_svn.so [root@localhost modules] -rwxr-xr-x 1 root root 102400 Apr 13 05:04 mod_dav.so [root@localhost modules] [root@localhost ~] [root@localhost httpd] IncludeOptional conf.d/*.conf [root@localhost httpd] [root@localhost httpd] LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <Location /svn> DAV svn SVNPath "/data/svn/project/" AuthType Basic AuthName "svn repos" AuthUserFile "/data/svn/project/htpassword" AuthzSVNAccessFile "/data/svn/project/conf/authz" Satisfy Any Require valid-user </Location> [root@localhost httpd] [root@localhost ~] [root@localhost ~]
|
初始版本库
这样做的好处是,用户访问管理员给的URL时,首先需要通过Apache的登录验证,再验证SVN的 authz ,两者都满足时,才能正常访问,且用户无法点上面的两个冒号切到上级目录(这时会切到初始版本库),如下图
如果用户满足了Apache的登录验证,但不满足SVN的验证,则会出现下图所示的情况
如果启动报下面这个错误,是因为没有安装mod_dav_svn,而在apache和subversion通讯需要加载“mod_dav_svn.so”和“mod_authz_svn.so”模块
1
| May 31 01:42:22 localhost httpd[11633]: Unknown DAV provider: svn
|
如果通过浏览器访问,出现下面信息,说明我们部署是没有问题的,只是访问URL搞错了
在subversion.conf中如果配置“”,则浏览器访问时的URL为:http://ip/svn
1
| ( success ( 2 2 ( ) ( edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops atomic-revprops partial-replay ) ) )
|
关于其他配置可以参考:https://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/
本文出自”Jack Wang Blog”:http://www.yfshare.vip/2017/05/30/部署Apache-Subversion版本控制系统/