Subversion和Apache的安装使用指南

虽然Subversion(SVN)直接可以注册为服务程序,但是最方便的还是使用SVN+Apache的方式,因为可以无防火墙限制、方便直接使用浏览器对代码进行浏览等等。下面我就将自己在Windows下安装Subversion(SVN)和Apache的方法记录一下:

1. 从Apache网站上下载Apache的安装包进行安装,这个过程比较简单。需要注意Apache的版本,本文采用2.2,当然也可以使用2.0版本。假定Apache的安装目录为D:\apache2。

2. http://subversion.tigris.org/官方下载Subversion的Windows下面与Apache的配合版本,这里需要注意Apache的版本,2.0和2.2的是不一样的,不要下载错了。

PS:最新的下载地址更新为:http://alagazam.net/,并且都是基于Apache2.2的,不在提供2.0版本的支持。

然后将下载下来的zip包解压缩到一个目录,比如D:\svn-win32-1.6.6。

3. 将svn安装目录的bin目录下面的mod_authz_svn.so和mod_dav_svn.so两个文件拷贝到Apache安装目录的modules目录下面,然后修改Apache的配置文件httpd.conf,将下面两行的注释去掉:

LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_module modules/mod_dav.so

同时在下面增加两行:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

4. 接下来就是对SVN进行配置了,配置文件(包含每条的含义)如下:

# 表示访问SVN的地址,形式为http:///svn
<Location /svn>
# 告诉Apache哪个模块负责服务像那样的URL--在这里就是Subversion模块
DAV svn
# 在Subversion 1.3及更高版本中,这个指示器使得Subversion列出由SVNParentPath指定的目录下所有的版本库
SVNListParentPath on
# 下面制定SVN仓库的位置,有两种选择:
# (1) 单库:一个Apache下面只有一个SVN仓库,这样的话就使用SVNPath来指定唯一的仓库位置,访问仓库的方式是http:///svn
# (2) 多库:一个Apache下面可以有多个SVN仓库,这样的话就使用SVNParentPath来指定所有仓库所在的主目录,访问仓库的方式是http:///svn/仓库1、http:///svn/仓库2等等
SVNPath "D:\Data\SVNData\repository"
#SVNParentPath "D:\Data\SVNData\repository"

# 当一个验证对话框弹出时,告诉用户这个验证是用来做什么的
AuthName "Subversion repositories"
# 启用基本的验证,比如用户名/密码对,通常来做这样做就已经足够了。
AuthType Basic
# 指定密码文件的位置,密码文件中存放了用来验证用户的用户名和密码信息。这个文件的生成方式在后续步骤中会介绍
AuthUserFile "D:\Data\SVNData\config\passwd"
# 对版本库和人员进行权限分配,后面会进行详细的设置和介绍。
AuthzSVNAccessFile "D:\Data\SVNData\config\svnaccessfile"

# 限定用户只有输入正确的用户名及密码后才能访问这个路径
Require valid-user
# 如果想匿名读取的话使用下面的方式
#<LimitExcept GET PROPFIND OPTIONS REPORT>
#Require valid-user
#</LimitExcept>
</Location>

5. 接下来使用Apache中的htpasswd.exe命令来生成密码文件,也就是上面AuthUserFile 设置项所指向的文件,切换到Apache安装目录的bin目录下,指向下面的命令:

# 后面的参数c表示新建文件,在第一次执行的时候使用
htpasswd -c D:\Data\SVNData\config\passwd <username>
# 如果是追加新用户或修改原有用户密码,命令后面不加参数c
htpasswd D:\Data\SVNData\config\passwd <username>

每次执行命令之后会提示输入两遍密码

6. 这个时候如果重启Apache的话会出现一个错误提示,这个是因为svn所使用的一些dll文件apache还无法获取,解决的方法可以将svn安装目录的bin目录下面的dll文件拷贝到系统的system32目录下面,但最好的方式是将bin目录加入到path环境变量中。

7. 这个时候如果访问http:///svn的话,应该会出现一个登录框,输入用户名/密码之后就可以看到SVN仓库的内容了。不过常见下面的几个错误:
(1) 出现“403 Forbidden”错误
出现这个错误的原因有很多种,比如Apache2.2相对于之前的版本来说增强了安全性,默认情况下目录是禁止访问的,将“<Directory />”修改如下:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>

如果这样还不行的话那就是“多库还是单库”的问题了。上面讲过,在对SVN进行配置的时候,使用SVNParentPath设置所有库的根目录,在根目录下面存放多个SVN的库,那这样的话直接访问父目录是没有权限的,只能通过http:///svn/project1来访问对应的项目仓库;如果使用SVNPath设置为单库的话则不会出现这个错误了。

(2) 出现“<m:human-readable errcode="720003">Could not open the requested SVN filesystem</m:human-readable>”错误
出现这个错误是告诉你你所指定的SVN仓库的位置并不是一个合法的SVN仓库,解决的方法是首先创建一个空目录,然后使用“svnadmin create”命令来创建SVN库:

# 首先进入 D:\Data\SVNData\repository 目录下
md project1
svnadmin create D:\Data\SVNData\repository\project1

8. 最后安装SVN客户端就可以访问啦,Eclipse集成的客户端推荐使用Subclipse,Visual Studio集成的客户端推荐使用ankhsvn,系统集成的客户端推荐使用TortoiseSVN

更新by 3/27/2012
如果操作系统为64位的话,因为没有提供基于64为的Subversion Server(包括VisualSVN都只有32位版本),所以无法使用64位的Apache,只能使用32位的Apache程序配合上面的SVN Server使用。

参考资料:
[翻译] windows安装基于Apache的SVN服务器(包括SSL配置)
基于svnserve的服务器,权限文件authz配置的常见问题及解答
Forbidden access or bad repository ?
Subversion for Windows 安裝指南

发表评论

电子邮件地址不会被公开。 必填项已用*标注