Subversion是目前最好用的版本管理软件,因工作需要最近一段时间一直在研究之!下边是使用心得:
建立版本库:svnadmin create D:\SVN\Repository
svnadmin create --fs-type bdb MyNewRepository
svnadmin create --fs-type fsfs MyNewRepository
默认为fsfs方式的DB
运行独立服务器:svnserve -d -r D:\SVN\Repository
配置用户和权限:至D:\SVN\Repository\conf目录,修改svnserve.conf,改
# [general]
# password-db = passwd
为:
[general]
password-db = passwd
修改同目录的passwd文件(用户名 = 密码)
去掉配置文件中的"#"和空格即为修改
[E:\svn_wxl_net\conf\svnserve.conf:12:option expected]
它是提示svnserve.conf文件的 12行有错误
就是"anon-access = read"前边多了一个空格
(假设SVN版本库的根目录为D:\SVN)
D:\SVN\TestRepo
启动SVN服务:svnserve.exe -d -r D:\SVN
svn://localhost/TestRepo
400 Bad Request 错误:
Submitted by steveking on Tue, 2005-05-17 19:52. Server Error
REPORT request failed on '...' REPORT of '...': 400 Bad Request (http://...)
You're behind a firewall which blocks DAV requests. Most firewalls do that.
Either ask your Administrator to change the firewall, or access the repository with https:// instead of http:// like in https://svn.collab.net/repos/tortoisesvn/
That way you connect to the repository with SSL encryption, which firewalls can't interfere with (if they don't block the SSL port completely).
卡巴斯基很容易出现该错误,此时需要修改杀毒软件设置!关闭其网络反病毒保护功能或者不监听80端口
◎◎◎◎在Apache中配置使用SVN--For Windows
/*******最基本的使用配置***********/
※※◎◎※※ : Apache服务器采用2.0.59版本,SVN采用1.3.2版本 !!注意1.3.2版本不能和Apache2.2版本集成
1.下载并安装SVN和Apache,假设SVN安装路径为C:\Program Files\Subversion,Apache安装路径为C:\Apache Group\Apache2
2.拷贝SVN安装目录下的bin文件夹(即目录C:\Program Files\Subversion\bin)下的mod_authz_svn.so和mod_dav_svn.so到
Apache安装目录下的modules文件夹(即目录C:\Apache Group\Apache2\modules)下
3.拷贝SVN安装目录下的bin文件夹(即目录C:\Program Files\Subversion\bin)下的libdb43.dll、libeay32.dll、ssleay32.dll到
Apache安装目录下的bin文件夹(即目录C:\Apache Group\Apache2\bin)下
4.修改Apache的httpd.conf文件,在模块加载列表找到以下语句:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
去掉前面的“#”号,启用加载这两个模块。然后再在模块加载语句最后添加以下两行:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_modulemodules/mod_authz_svn.so
5.建立SVN版本库(假设SVN版本库的跟目录为D:\SVN),命令如下:
建立版本库:svnadmin create D:\SVN\Repository
svnadmin create --fs-type bdb MyNewRepository
svnadmin create --fs-type fsfs MyNewRepository
默认为fsfs方式的DB
6.修改Apache配置文件httpd.conf,创建不带有任何权限控制的SVN服务器:
在文件最后追加
#SVN
<Location /svn>
DAV svn
SVNListParentPath on #使用SVN版本库列表功能
SVNParentPath D:\SVN #SVN版本库根目录
</Location>
7.重启Apche服务器即可,在浏览器输入:http://localhost/svn/ 验证
/******创建带有简单的基本安全认证的服务器******/
1.创建passwd密码文件:
htpasswd -c D:/SVN/passwd paleswd
htpasswd D:/SVN/passwd admin #增加用户
2.修改Apache配置文件httpd.conf如下:
#SVN
<Location /svn>
DAV svn
SVNListParentPath on
SVNParentPath D:\SVN
#认证的类型
AuthType Basic
#认证的名称,显示于登录提示框
AuthName "Subversion repositories!Login needed!"
#Which password file to use for authentication 存储用户登录信息的文件
AuthUserFile D:\SVN\passwd
#For any operations other than these, require an authenticated user.匿名用户只有读权限 登录用户有写权限
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user #Only valid users are allowed to access the URL
</LimitExcept>
</Location>
/******创建带有简单的基本安全认证和访问控制文件的服务器******/
修改Apache配置文件httpd.conf如下:
#SVN
<Location /svn>
DAV svn
SVNListParentPath on
SVNParentPath D:\SVN
#认证的类型
AuthType Basic
#认证的名称,显示于登录提示框
AuthName "Subversion repositories!Login needed!"
#Which password file to use for authentication 存储用户登录信息的文件
AuthUserFile D:\SVN\passwd
#Location of the Access file for paths inside a Subversion repository!存储SVN服务器的访问控制策略
AuthzSVNAccessFile D:\SVN\svnaccessfile.txt
#For any operations other than these, require an authenticated user.匿名用户只有读权限 登录用户有写权限
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user #Only valid users are allowed to access the URL
</LimitExcept>
</Location>
对应的passwd文件如下:
paleswd:$apr1$yX......$s2FuHfYFK.jYjogQqQ.EA.
admin:$apr1$pq2.....$XC80ZNTxAoQbeNqHj.YDG.
guest:$apr1$nr2.....$3CNvoIQ28d.SPlmEIzDcP/
rsgs:$apr1$ys2.....$9uGGFTzJf1sfqKHX1J1Yf0
project:$apr1$Lu2.....$A3OVHjd6IVZNdp9qYU4BO1
Paleswd:$apr1$964.....$2Wm.Ssoc59zjC2i07Qq1v.
swd:$apr1$E35.....$hUErAvnLfdnbtB.TYV7yO1
pale:$apr1$x35.....$7Jz3JkCP2U0Sk3s2ubgk4/
编写的AuthzSVNAccessFile文件如下:
[groups]
admin = paleswd, admin
guest = guest, rsgs
pro = project
swd =swd, @pal
pal = Paleswd
# Default access rule for ALL repositories
# Everyone can read, admins can write
[/]
* = r
@admin = rw
[Repository:/Project-1]
@pro = rw
[Repository:/Paleswd]
@pal = rw
[Paleswd:/]
@pal = rw
[Paleswd:/Paleswd 2006-08-23]
@swd =rw
[Guest:/]
@guest = rw
@swd =rw
[Project:/]
@pro = rw
◎◎◎◎特别提示:
组成员居然还可以相互引用
注意:对某一个文档库下的文件夹施行访问控制时该文件夹的路径后不能跟"/"
比如要对Repository版本库中根目录下的Paleswd文件夹实行控制,路径要写成:[Repository:/Paleswd],而不能为:[Repository:/Paleswd/]
组成员居然还可以相互引用
注意对某一个文档库下的文件夹施行访问控制时该文件夹的路径后不能跟"/"
比如要对Repository版本库中根目录下的Paleswd文件夹实行控制,路径要写成:[Repository:/Paleswd],而不能为:[Repository:/Paleswd/]
可以支持带有空格路的径
经过测试,发现subversion是可以很好地控制中文目录的权限的。
方法很简单,就是将你的权限控制文件的格式转换为UTF-8格式,
将权限文件改成UTF-8格式我使用的是UltraEdit的菜单"ASCII to UTF-8 (Unicode Editing)"。
注:SVN版本库根目录下有Paleswd、Repository、Guest、Project几个版本库
※※※注意在编写AuthzSVNAccessFile文件时,如果要使用SVNListParentPath功能时在Location设置中最后一定要加上/,
应该是<Location /svn/>而不是<Location /svn>,否则可能不能访问的,将出现如下错误:
Forbidden
You don't have permission to access /svn/ on this server.
--------------------------------------------------------------------------------
Apache/2.0.59 (Win32) SVN/1.3.2 DAV/2 Server at localhost Port 80
不使用AuthzSVNAccessFile文件配置时写成<Location /svn>不会出现该问题!切记!!!
另外必须指定AuthUserFile和AuthzSVNAccessFile文件的路径
◎◎◎◎