SVN的访问方式
Subversion 文件仓库可以通过许多不同的方式进行访问(Check Out,签出)——通过本地硬盘,或者通过各种网络协议。无论如何,文件仓库的位置总是使用 URL 来表示。下表显示了不同的 URL 模式对应的访问方法:
模式 | 访问方法 |
file:/// | 直接访问本地硬盘上文件仓库 |
http:// | 通过 WebDAV 协议访问支持 Subversion 的 Apache 2 Web 服务器 |
https:// | 类似 http://,支持 SSL 加密 |
svn:// | 通过自带协议访问 svnserve 服务器 |
svn+ssh:// | 类似 svn://,支持通过 SSH 通道 |
这里只介绍http://的多库访问,因为很有代表性,已经包含所有的基本配置了,特此记录日志。
实现功能:
MD5加密(使用apache的htpasswd的-m加密)
http://访问 (apache的mod_dav_svn.so 和mod_authz_svn.so)
多版本库共存 和易于管理的独立配置文件(subversion.conf)
库文件内的任意一个文件的权限操作(这是单svn://无法达到的)
不需要开放多余端口
---------------------------------------------------安装-----------------------------------------------------
yum install subversion httpd mod_dav_svn
#只需要以上的三个,配置源,下载最新的。这里的apache可以因人而异自行修改,主要文件还是Apache的mod_dav_svn模块的支持
--------------------------------------------------配置----------------------------------------------------
首先说明库的根目录是/home/svn,在根目录下会创建多个库
#第一个库:
mkdir /home/svn/datesvn
svnadmin create /home/svn/datesvn
#第二个库:
mkdir /home/svn/datesvn1
svnadmin create /home/svn/datesvn1
#这里为了统一管理,所有的配置在第一个库datesvn里配置,然后通过apache来指向配置文件位置,就不用写两份配置文件了
vi /home/svn/datesvn/authz
[groups] #通过分配群组来实现目录访问权限
admin = ch
docs = test2
#datesvn的库
[datesvn:/]
ch = rw
[datesvn:/Test] #这里是datesvn库里边的Test文件夹的权限
@docs = r # @指的是代表群组docs所有成员,上边的是独立一个成员ch
#datesvn1的库
[datesvn1:/] # 这里[/] [datesvn:/] [datesvn1:/]其实分别意思为,/home/svn,/home/svn/datesvn/,/home/svn/datesvn,当然这里是不推荐放出[/]目录的
@docs = rw
#权限有r,w,rw,还有none,最好不要做出* =r或者* = rw等的事情。如果你配过防火墙,那么应该知道原则是先封闭,后开放。那么为了更加安全,默认subserve是只有写在配置文件的目录才能被访问,没有写上去的不能被访问。也就是说,默认不写东西是无法被访问的,也就是封闭的,那么再写下目录和权限,这样的话就不会有冲突的访问规则。例如根目录下你的默认访问权限是r,也就是* = r,那么你认为就算你后来设置w的时候不会有问题吗?我反正是无论如何都是写不进的,只要有* =r。有人这么写过,不过我想不通他这么写的原因,或许就是个可读库吧
vi /etc/httpd/conf.d/subversion.conf
<Location />
DAV svn
SVNParentPath /home/svn/ #这里是设置根目录,也就是所有库文件的根目录例如/home/svn/datesvn和/home/svn/datesvn1的根目录就是/home/svn
# SVNPath /home/svn/datesvn #这里是设置单个库的目录,如果只有一个库,可以用这个
# <LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
AuthName "验证信息" #svn连接时的提示信息,可手动修改
AuthzSVNAccessFile /home/svn/datesvn/conf/authz #文件访问的权限配置文件,需要制定文件,官网说明没有这项,需要自己补上
AuthUserFile /home/svn/datesvn/conf/passwd #指定密码文件
Require valid-user #只有认证用户才可以访问,类似防火墙的拒绝
# </LimitExcept>
</Location>
/*
如果你乐意,也可以这样做
<Location /datesvn>
DAV svn
#SVNParentPath /home/svn/ #这里是设置根目录,也就是所有库文件的根目录例如/home/svn/datesvn和/home/svn/datesvn1的根目录就是/home/svn
SVNPath /home/svn/datesvn #这里是设置单个库的目录,如果只有一个库,可以用这个
# <LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
AuthName "验证信息" #svn连接时的提示信息,可手动修改
AuthzSVNAccessFile /home/svn/datesvn/conf/authz #文件访问的权限配置文件,需要制定文件,官网说明没有这项,需要自己补上
AuthUserFile /home/svn/datesvn/conf/passwd #指定密码文件
Require valid-user #只有认证用户才可以访问,类似防火墙的拒绝
# </LimitExcept>
</Location>
<Location /datesvn1>
DAV svn
#SVNParentPath /home/svn/ #这里是设置根目录,也就是所有库文件的根目录例如/home/svn/datesvn和/home/svn/datesvn1的根目录就是/home/svn
SVNPath /home/svn/datesvn1 #这里是设置单个库的目录,如果只有一个库,可以用这个
# <LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
AuthName "验证信息" #svn连接时的提示信息,可手动修改
AuthzSVNAccessFile /home/svn/datesvn/conf/authz #文件访问的权限配置文件,需要制定文件,官网说明没有这项,需要自己补上
AuthUserFile /home/svn/datesvn/conf/passwd #指定密码文件
Require valid-user #只有认证用户才可以访问,类似防火墙的拒绝
# </LimitExcept>
</Location>
由于很多文章没有详细讲述SVNParentPath,当时个人觉得还是挺方便的,推荐
*/
#添加可访问用户
htpasswd -c /home/svn/datesvn/conf/passwd ch
htpasswd /home/svn/datesvn/conf/passwd test2
htpasswd的使用方法请在我的另一文章查看
service httpd restart
#以上是个人查阅文档后写的简单模板,有更好的建议请联系我。
/*-------------------------------------------------------------介绍篇------------------------------------------------------------------------
/home/svn/datesvn/conf下这些文件是主要的配置文件:
svnserve.conf: svn服务配置文件,apache有相似的功能,所以这里没有说这个文件的作用,因为不会用到。
passwd: 用户名口令文件。
authz: 权限配置文件。
安装完mod_dav_svn后,默认会在apache的conf.d目录,出现以下模块的mod_dav_svn.so 和mod_authz_svn.so
以及subversion.conf,当然你会看见,
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
已经帮你写好调用了,不需要再主配置文件httd.conf再写的了
权限问题,由于是http访问,那么写和读都要有apache的权限操作才能完成
# To create a new repository "http://localhost/repos/stuff" using
# this configuration, run as root:
#
# # cd /var/www/svn
# # svnadmin create stuff
# # chown -R apache.apache stuff
# # chcon -R -t httpd_sys_content_t stuff
subversion里边有写到,必须是apache可以访问,如果有开selinux,那么chcon -R -t httpd_sys_content_t stuff
*/
那么配置好后,主要是以下几个文件的增删改查:
添加用户 htpasswd /home/svn/datesvn/conf/passwd 用户
修改权限 vi /home/svn/datesvn/authz
service httpd reload
访问方式
http://ip/datesvn
http://ip/datesvn1
当然也可以配置域名访问
更多详情可看subversion中文网,比较简洁的版本安装,但是功能定制比较详细的就没有比较好的例子了
http://wiki.ubuntu.org.cn/SubVersion