SVN--subversion的五种访问方式

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

posted on 2014-11-04 16:19  waterfoxjie  阅读(2437)  评论(0编辑  收藏  举报