在配置SVN时应该注意的问题和操作步骤。在配置SVN服务的过程中,参看了许多网友的资料和文章,这里先对大家表示感谢,希望大家最大限度的做到知识共享,一起进步。
SvnServe提供服务(subVersion自身的一种服务,配置简单)有许多缺点,如只能有一个数据仓库(Repository),不能设置SSL安全等等。也许大家在《Subversion以及TortoiseSVN(svnServe提供的服务)》一文中发现,我们在用SVN进行客户端迁出时,用的是svn://localhost/svnDB01
,因为不是http协议,所以在穿越防火墙时可能会有限制。如果用Apache提供HTTP服务就没有什么限制了。察看了一些网友的资料,终于把其配置成功了。现把操作步骤写下来,与没有配置过或配置没有成功的朋友借鉴一下。
首先,肯定是配置apache服务了。我的Apache安装版本是apache_2.0.55-win32-x86-no_ssl.msi
,
也就是说版本是2.0.55了,据说svn是基于apache2.x写的,所以必须用apaxhe2.x版本,注意一下。
1 把svn解压目录的bin目录下的int13_svn.dll libdb44.dll
libeay32.dll ssleay32.dll 4个文件拷贝到Apache安装目录的bin目录下。,如图示:
2 把svn解压目录的bin目录下的mod_authz_svn.so mod_dav_svn.so
拷贝到Apache安装目录的modules目录下。
3 这一步是最重要的一步,也就是配置Apache服务。配置如下
- 把
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
前面的#号去除。
- 在“加载模块”下新加2行
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
如图示:
在配置文件的最后加如下几行
<Location /mocha>
DAV svn
SVNParentPath E:/svnRepository
</Location>
下面对这几行话说明一下。
* <Location /mocha>中的/mocha说明当用svn客户端访问时,访问方式为:http://localhost/mocha/
好像和IIS中的虚拟目录似的。即Location节点后面的/* 必须和http://主机ip/* 一致。
* DAV svn是不能变的。具体的作用我也不是很清楚。
* SVNParentPath E:/svnRepository说明我在E盘下建立了一个svnRepository目录(这个目录不是创建版本库的目录),这个目录作为父目录,在其下面建立不同的子目录(子目录是创建版本库的目录)。就是说在Apache服务下,可以创建多个版本库。如我在svnRepository目录下建立了2个版本库(当然你可以建多个),具体怎么建立版本库就不做介绍了,可以参考前面的一篇日志。如图:
这样我们就可以通过http://myhost/mocha/<项目名>
来访问存放于资源库F:/svnRepository中的指定项目。当然有可能你并不希望某个项目提供这样一种访问方式,这时候你可以使用SVNPath为每个项目进行单独的设置,SVNPath的使用方法如下:
DAV svn
SVNPath "F:/svnRepository/project1"
同样把这段配置放在httpd.conf最后,重启Apache HTTP服务即可通过http://myhost/mocha/project1
来访问project1项目的资源库。
这样就建成了一个没有任何权限控制,每个用户都能访问的SVN服务。我们打开Apache服务看一下。如图:
其中 aa.txt bb.txt是我上传到svn服务上的文件,testFlod是新建的一个目录。
任意建立一个目录,在里面点击右键,选择“SVN检出”,就能从svn服务器上下载下来对应的文件,如图:
看,这里已经是http提供的服务了。
------------------------- Apache的权限配置 --------------------------
终于把Apache的权限配置给搞出来了,赶快记下来,以作备忘。
先在E:svnRepository目录(父目录)下建立一个conf目录,专门放权限配置文件用,如图:
打开控制台,进入apache的bin目录,执行htpasswd -c E:svnRepositoryconfauth_pw
aa 说明:-c表示是新建文件,文件建立于E:/svnRepository/conf/下面,名字为auth_pw ,建立一个名字叫
aa的用户,接下来,系统会让你输入密码。在建立一个名字叫bb的用户,执行命令为:htpasswd -m E:svnRepositoryconfauth_pw
bb 说明:-m表示文件已经存在。
系统提示输入密码,这样就建立了2个用户,密码被MD5加密。如图:
在conf目录下建立 authz 的文件(权限控制),文件内容如下:
-------------------------
[/]
aa = rw
bb = rw
[rep1:/]
aa = r
bb = rw
[rep1:/testFlod]
aa = rw
bb = r
[rep2:/]
aa = rw
bb = rw
-------------------------
结合我的实际,现在给与说明:
[/] // aa bb 用户对根目录(E:svnRepository)下所有文件的操作权限
aa = rw // aa 有读写权限
bb = rw // bb有读写权限
[rep1:/] //对rep1 数据仓库的控制权限
aa = r // aa 有读的权限,而没有写的权限
bb = rw
[rep1:/testFlod] //对rep1 数据仓库下 testFlod 文件夹的访问权限 注意如何对数据仓库下某一目录的访问(值得注意的是,这里的目录是通过svn建立的目录,而不是在rep1下面硬性建立的目录,即这个目录是受svn版本控制的)
aa = rw
bb = r
[rep2:/] // 对rep2 数据仓库的访问权限
aa = rw
bb = rw
当然,apache的 httpd.conf 文件也要改一下,改动如下:
<Location /mocha>
DAV svn
SVNParentPath E:/svnRepository
AuthzSVNAccessFile E:/svnRepository/conf/authz
AuthType Basic
AuthName "Subversion projectA"
AuthUserFile E:/svnRepository/conf/auth_pw
Require valid-user
</Location>
这样就实现了对用户权限的基本控制。有篇文章(http://www.duduwolf.com/wiki/2006/103.html)讲的方法好像更好,但是我没有试过,只把文字摘录下来,做个记号。
在上一篇文章中,我们已经实现了对SVN和Apache的安装,并将它们集成在一起工作。这一篇则主要介绍如何对SVN
For Apache进行一些配置。
在Apache下为SVN建立多个库。上篇中虽然也建立了一个SVN的库在Apache下,但是我们不可能一个SVN服务器上只有一个项目,或者所有项目共用一个SVN库进行开发,在Apache上为SVN建立多个库可以通过建立多个虚拟目录的方式实现。下面我们就来讲讲具体的步骤(注意,此篇中的配置和上篇中的配置方式有很大区别)
到F盘建立我们的SVN代码存放位置目录:SubversionFiles,并在其中建立一个conf目录,将会把对Apache对SVN的配置文件都放在这里
再在F:SubversionFiles下目录Test1和Test2,并将它们变成SVN库(用svnadmin
create命令或者用TortoiseSVN来创建都可以)
在httpd.conf的最后添加如下代码
#
# SVN 项目配置文件,格式:Include 配置文件名
#为每个虚拟目录设置一个配置文件,用Include命令加载
#
Include F:/SubversionFiles/conf/*.project
即把F:/SubversionFiles/conf/目录下的所有*.project文件都包到httpd.conf中来
在F:/SubversionFiles/conf/创建Test1.project和Test2.project文件,Test1内容如下,Test2可以做相应的修改
#SVN项目名
DAV svn
#SVN项目的路径
SVNPath F:SubversionFilesTest1
#SVN项目的路径权限授权文件存放路径
AuthzSVNAccessFile F:SubversionFilesconfTest1.access
#对于所有用户都需要身份验证
Satisfy Any
Require valid-user
#验证方式
AuthType Basic
#项目的名称
AuthName "My Test1"
#用户信息
AuthUserFile F:SubversionFilesconfuser
以上配置含义是在Apache下建立了一个叫作Test1的SVN虚拟目录,指向F:SubversionFilesTest1,授权配置文件是F:SubversionFilesconfTest1.access,用户信息和密码文件是F:SubversionFilesconfuser
通过以上配置,我们就在Apache上建立了Test1和Test2两个虚拟目录,也就是两个独立的SVN库,我们还需要两个文件访问权限配置的.access和包含登录用户的user。
在F:SubversionFilesconf目录中创建用户列表文件user,方法在上篇中已经说过,也就是htpasswd命令,我们需要创建Xrinehart,
X-Killer, Guest三个用户。
接下来,我们为Test1库创建它的访问权限文件F:SubversionFilesconfTest1.access。在上篇文章中我们是采用对每个用户分别赋予对应权限的方式,如果用户比较多,管理起来就会比较麻烦,这时我们需要用用户组来对用户进行管理。下面我们就来尝试用用户组配置访问权限。Test1.access文件内容如下:
[groups]
AdminGroup = Xrinehart
GuestGroup = guest
[/]
@AdminGroup = rw
@GuestGroup = r
X-Killer = rw
在上面的配置中,通过[groups]节定义了两个用户组:AdminGroup和GuestGroup,并将Xrinehart用户归入AdminGroup用户组,guest用户归入GuestGroup。再在下面的[/]定义了他们对Test1库的根目录的操作权限:AdminGroup组有读写权限,GuestGroup组只有读权限,X-Killer用户拥有读写权限。这里需要注意的是定义权限的时候,用户组需要在前面加@符号来标示。
为了测试效果,我们可以将Test2.access文件写为:
[groups]
AdminGroup = Xrinehart, X-Killer
GuestGroup = guest
[/]
@AdminGroup = r
@GuestGroup = rw
保存好上面的所有配置文件之后,重新启动Apache服务器。此时我们就可以在IE里面通过http://localhost:8080/Test1
和http://localhost:8080/Test2 来访问Test1和Test2库了,你可以测试一下,用户权限是否符合下面这个列表所示?做到这里,SVN在Apache上建立多个库的配置也就算完成了。
Test1
Test2
Xrinehart
rw
r
X-Killer
rw
r
guest
r
rw
--------------------------------------------------
自动备份的批处理文件(bat)
echo off
PAUSE
rem Subversion的安装目录
set SVN_HOME="C:svn-win32-1.4.3bin"
rem svn版本库目录
set SVN_ROOT="E:backupsvnRepositoryxxfb"
rem 备份的目录
set BACKUP_SVN_ROOT=D:svnBak%date:~0,10%
mkdir D:svnBak%date:~0,10%
@echo 正在备份版本库 请稍候......
@%SVN_HOME%svnadmin hotcopy %SVN_ROOT% %BACKUP_SVN_ROOT%
@echo 版本库%SVN_ROOT%成功备份到了%BACKUP_SVN_ROOT%
PAUSE
|