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>

#添加可访问用户

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再写的了

权限问题

# 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

时间: 2024-10-13 07:00:30

SVN--subversion的五种访问方式的相关文章

Hibernate的检索及五种数据检索方式

检索数据时的 2 个问题 1). 不浪费内存:当 Hibernate 从数据库中加载 Customer 对象时, 如果同时加载所有关联的 Order 对象, 而程序实际上仅仅需要访问 Customer 对象, 那么这些关联的 Order 对象就白 白浪费了许多内存. 2). 更高的查询效率:发送尽可能少的 SQL 语句 类级别的检索策略 2. 类级别的检索策略:(主要掌握 load 方法和 get 方法的区别!) 1). 类级别可选的检索策略包括立即检索和延迟检索, 默认为延迟检索 ①. 立即检

Spring事务Transaction配置的五种注入方式详解

Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ??? 总结如下: ??? Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. ???DataSou

Spring-AOP的五种通知方式

AOP的五种通知方式: 前置通知:在我们执行目标方法之前运行(@Before) 后置通知:在我们目标方法运行结束之后,不管有没有异常(@After) 返回通知:在我们的目标方法正常返回值后运行(@AfterReturning) 异常通知:在我们的目标方法出现异常后运行(@AfterThrowing) 环绕通知:目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,joinPoint.procced()就是执行目标方法的代码 .环绕通知可以控制返回对象(@Around) 一.导jar包 co

LFU五种实现方式,从简单到复杂

前言 最近刷力扣题,对于我这种 0 基础来说,真的是脑壳疼啊.这个月我估计都是中等和困难题,没有简单题了. 幸好,力扣上有各种大牛给写题解.看着他们行云流水的代码,真的是羡慕不已.让我印象最深刻的就是人称 "甜姨" 的知心姐姐,还有名叫威哥的大哥.几乎每天他们的题解我都是必看的. 甜姨的题解,虽然姿势很帅,但是对于我这种新手来说,感觉不是太友好,因为思路写的太少,不是很详细.所以,每次我看不明白的时候,都得反复看好几遍,才能想明白她代码中的思路. 上个周末的一道题是,让实现一个 LFU

1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式

 1.打印二进制机器码(分别表示32位的和64位的) #include <stdio.h> /*按照8位的长度打印一个数值*/ void dis8bit(char val) { int bit = 8; while(bit--) { if(1<<bit&val){ printf("1"); } else { printf("0"); } if(!(bit%4)) printf(" "); } putchar(1

Android五种布局方式——LinearLayout、RelativeLayout、TableLayout....(四)

Android五种布局方式--LinearLayout.RelativeLayout .TableLayout.... Android使用XML声明界面布局 将程序的表现层和控制层分离 修改用户界面时,无需更改程序的源代码 可视化工具设计用户界面 Android五种布局方式 LinearLayout线性布局 AbsoluteLayout坐标布局 RelativeLayout相对布局 FrameLayout帧布局 TableLayout表格布局 GridLayout 1.LinearLayout线

索引的五种访问模式

1 index unique scan 效率最高,主键或唯一索引 2 index fast full scan 读的最快,可以并行访问索引,但输出不按顺序 3 index full scan 有顺序的输出,不能并行读索引. 4 index range scan 在给定的区间查询 5 index skip scan 联合索引,不同值越少的列,越要放在前面 索引的五种访问模式

CacheConcurrencyStrategy五种缓存方式

CacheConcurrencyStrategy有五种缓存方式:  CacheConcurrencyStrategy.NONE,不适用,默认  CacheConcurrencyStrategy.READ_ONLY ,只读模式,在此模式下,如果对数据进行更新操作,会有异常:  CacheConcurrencyStrategy.READ_WRITE ,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询:  CacheConcurren

一维数组的两种访问方式

一维数组指针,int *prt=new int[10],*ptr和ptr[0]是一样的吗? 通过下面代码测试: int * array = new int[10]; for(int i=0;i<10;i++) { array[i] = i; } for(int i=0;i<10;i++) { cout<<*(array+i)<<endl; } 所以数组可以用 array[i]和 *(array+i)两种方式访问. 一维数组的两种访问方式