SVN最常见的配置模式便是与Apache集成,这样SVN可以采用WebDev协议方式提供服务。主要的好处有:通过Apache以HTTP方式穿透防火墙,便于在互联网环境使用;提供目录的版本控制;纯2进制的文件对比方式等。下面将介绍如何将SVN集成在Apache上。
准备工作:
下载软件:
SVN服务器端程序。到官方网站 的下载二进制安装文件,来到二进制包下载部分 ,找到 Windows NT, 2000, XP
and 2003部分,然后选择"this directory",这样我们可以看到许多下载的内容,目前可以下载
svn-1.2.3-setup.exe。
TortoiseSVN,客户端程序。TortoiseSVN是扩展Windows Shell的一套工具,可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录。
官方网站是TortoiseSVN,下载方式和前面的svn服务器类似,在Download页面的我们选择Official version
for Win2k/XP or higher的版本,然后在sourceforge的下载页面选择目前的最高稳定版本的安装文件TortoiseSVN-1.2.5.4719-svn-1.2.3.msi。(注意:TortoiseSVN有一个特殊对VS.Net运行时一个BUG修正的版本,在下载页面有选择:Special
version for Win2k/XP or higher: (We provide NO support for this!)
uses _svn folders instead of .svn to work around the VS.NET bug
with web projects. If you don't use web projects then please use
the official version. )
TortoiseSVN的中文语言包,注意这个需要下和客户端程序版本相同的。可以在Download页面内的Language Packs选择下载。
Apache服务器程序。可以到Apache官方网站下载最新版本的Apache,并且SVN必须运行在Apache2以上版本,在下载页面选择Windows的安装包文件apache_2.0.55-win32-x86-no_ssl.msi
AnkhSVN,可选安装VS.Net的SVN插件。有0.5和0.6版本选择,0.6版支持VS2005 Beta2,下载页面。
停止IIS,因为Apache默认安装为80端口,需要关闭IIS避免端口冲突。可以在安装好之后再调整端口。
开始安装:
先安装Apache服务器。在到填写ServerInfo的时候,若机器已经启用了AD,安装程序会自动填写,否则自己手动填写。安装完成之后到安装目录下找到conf目录下的httpd.config文件,搜索Listen,并将Listen后面的80改为8080(或者你希望的端口),然后重新启动Apache服务器,这时可以用http://localhost:8080
来测试是否安装正确。
再安装SVN服务器,没有什么好说的,一路回车就可以了。(安装SVN时,请确保Apache服务器正在运行状态,安装过程中可能会将Apache关闭,重新启动属于正常现象)
配置Apache服务器与SVN集成:
首先将Subversion安装目录bin\下面的两个文件:mod_authz_svn.so和mod_dav_svn.so复制到Apache安装目录modules\目录下。
有些文章说需要再修改httpd.conf,并做如下修改:
找到Apache安装目录下的conf目录,用文本编辑器打开httpd.conf,找到一下两行:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
将每行前面的注释符“#”去掉。再在所有LoadModule语句的最后添加一下几行:
#SVN
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
但是我安装完之后发现这个文件已经被做了那些修改,大概是新版的SVN安装程序做了一些优化吧。其实在成功安装SVN之后,Apache服务器已经和SVN初步集成。如图:
注意下面的状态栏已经是Apache/2.0.55 SVN1.2.3 DAV/2
建立一个SVN存放文件的目录,我在F盘下创建一个文件夹:F:/SubversionFiles
接下来我们必须告诉Apache我们的资源库所在的路径,可以通过Location指令来完成这个设置。因为不希望为每个单独的项目都进行单独的设置,所以我们把所有项目都存放在统一的资源库目录,那么可以使用SVNParentPath指令来指定存放所有项目的路径。在httpd.conf文件最后添加下面配置:
#SVN
<Location /svn>
DAV svn
SVNParentPath "F:/SubversionFiles"
</Location>
这样我们就可以通过http://myhost:8080/svn/<项目名> 来访问存放于资源库F:/SubversionFiles中的指定项目。当然有可能你并不希望某个项目提供这样一种访问方式,这时候你可以使用SVNPath为每个项目进行单独的设置,SVNPath的使用方法如下:
DAV svn
SVNPath "F:/SubversionFiles/project1"
同样把这段配置放在httpd.conf最后,重启Apache HTTP服务即可通过http://myhost:8080/svn/project1
来访问project1项目的资源库。
下面作一个测试:
到F:\SubversionFiles下建立一个子目录Test,然后到Aapche下的Bin目录下执行svnadmin create
F:\SubversionFiles\Test
打开浏览器输入网址:http://localhost:8080/svn/Test ,应该可以正确访问,但当前该项目下还没有加入任何内容,所以显示为空的
有一点需要提示的是,现在的访问是完全匿名的,任何人都可以对SVN进行操作。所以我们接下来利用Apache的权限管理功能来对SVN进行用户验证集成
加入用户身份验证:
在确定对访问用户的权限控制之前,你必须规划好是对整个资源库中的所有项目还是单独的某一个项目进行统一的身份验证, 也就是我们前面讲到的是使用SVNParentPath还是SVNPath的问题。
最简单的身份验证方式是使用Basic HTTP Authentication机制,该方式通过用户名和口令对访问用户进行身份验证。我们可以直接通过Apache提供的支持进行设置。Apache提供一个htpasswd工具来管理用户名和口令。接下来我们利用这个工具来添加两个用户。
在命令行窗口中转到Apache所在的目录,执行下列命令
说明:创建用户Xrinehart
输入:htpasswd –c F:\SubversionFiles\svn_auth_passwd Xrinehart
说明:使用-c参数来创建一个passwd文件
输出:
New password: *****
Re-type new password: *****
Adding password for user Xrinehart
再创建用户的时候就不用-c参数,而是用-m参数,因为文件svn_auth_passwd 已经创建。
#
# SVN
#
DAV svn
SVNParentPath "F:/SubversionFiles"
# how to authenticate a user
AuthType Basic
AuthName "Subversion repository"
AuthUserFile "F:/SubversionFiles/svn_auth_passwd"
# only authenticated users may access the repository
Require valid-user
重新启动Apache HTTP服务器,使用浏览器打开 http://localhost:8080/svn/Test 你将会看到要求登录的对话框,输入你刚设置的用户名和口令即可。
这样Apache和SVN的集成就基本告成了
打开svn_auth_passwd文件,密码使用MD5加密过了,而且同样的密码加密出来的内容却不相同
接下来我们必须告诉Apache服务器如何使用这个passwd文件,打开httpd.conf找到刚才我们添加的Location配置的位置,修改如下:
在上一篇文章中,我们已经实现了对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:\SubversionFiles\Test1
#SVN项目的路径权限授权文件存放路径
AuthzSVNAccessFile F:\SubversionFiles\conf\Test1.access
#对于所有用户都需要身份验证
Satisfy Any
Require valid-user
#验证方式
AuthType Basic
#项目的名称
AuthName "My Test1"
#用户信息
AuthUserFile F:\SubversionFiles\conf\user
以上配置含义是在Apache下建立了一个叫作Test1的SVN虚拟目录,指向F:\SubversionFiles\Test1,授权配置文件是F:\SubversionFiles\conf\Test1.access,用户信息和密码文件是F:\SubversionFiles\conf\user
通过以上配置,我们就在Apache上建立了Test1和Test2两个虚拟目录,也就是两个独立的SVN库,我们还需要两个文件访问权限配置的.access和包含登录用户的user。
在F:\SubversionFiles\conf目录中创建用户列表文件user,方法在上篇中已经说过,也就是htpasswd命令,我们需要创建Xrinehart,
X-Killer, Guest三个用户。
接下来,我们为Test1库创建它的访问权限文件F:\SubversionFiles\conf\Test1.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 |