1.准备安装过程中需要的资源
Subversion的安装包。Subversion可在http://subversion.tigris.org/下载,截止至本文撰写日期的最新稳定版本是1.4.2。和其它开源的项目一样,Subversion提供了源码包和二进制包下载,如果仅是使用它的话,下载已做好的二进制包就可以了。对于Windows平台,还有一些网友把二进制包做成了安装程序,但个人觉得不必要下载,因为这些安装程序除了创建了一些快捷方式之外,没有做更多的事情了。
Apache Web服务器安装包。如果需要将Subversion挂到Apache上,则需要下载Apache。Apache可以在其官方网站http://httpd.apache.org下载。Subversion官方网站提供的1.4.2版二进制包只支持Apache 2.0.x,还不支持Apache 2.2.x,下载时要注意。
TortoiseSVN安装包。TortoiseSVN及其本地化语言包可以在http://tortoisesvn.net/downloads下载,它是一个不错的Subversion Windows客户端,它能无缝地集成到Windows资源管理器的右键菜单中,使用很方便。当前最新的TortoiseSVN是1.4.1版,支持Subversion 1.4.2的新特性。当然可以根据自己的需要选择其它客户端软件。
2.安装
安装Subversion很简单,只要将其二进制包解压到某个目录里即可。为了能比较方便地访问Subversion的各个命令行工具,可以把安装目录下的bin子目录加入到Windows的PATH环境变量中。
Apache的安装过程也很简单。无非是填写与服务器相关的一些信息,确认服务器使用的端口号、指定安装路径等。端口号默认为80;如果你的机器上已经有其它服务器(例如IIS)使用了这个端口,可以在安装完毕后修改配置文件,使用另一个端口号即可。以下假定Apache安装在D:\Apache2目录里。
在客户端安装TortoiseSVN基本上是一路回车即可。安装结束时安装程序会提示需要重新启动机器,实际上不启动也可立即使用。安装完毕后在Windows资源管理器的右键菜单中会出现TortoiseSVN菜单项,表明它已经在工作了。
3.创建版本库
3.1确定你仅需要一个版本库,还是需要多个版本库。使用前者,配置和访问的时候会简单一点,但所有的信息都放到同一个库中,可能不便于分类。由于只有一个库,它可能会变得很大,不利于维护。使用多个库的优缺点恰好相反。
3.1确定你的版本库存放的位置。一般需要为版本库创建一个单独的目录,如果只打算创建一个库,那么该目录可以直接存放该版本库;如果打算创建多个库,这些版本库应该在该目录下使用独立的子目录。以下假定使用D:\svn_repos存放版本库,并且未来可能创建多个库。
3.1创建版本库。在命令行提示符下输入svnadmin create repository_path来创建版本库,其中repository_path是存放版本库的完整目录(如D:\svn_repos\test)。版本库创建完毕后在repository_path里会有一组子目录,分别用于不同的目的。
3.配置
这里说的配置是指服务器端的配置,其实也是这篇文章的重点。
Subversion提供了5种访问版本库的方式:
1)直接版本库访问。客户端使用file:///打头的URL访问存储在本地磁盘上的版本库。这种情况下几乎不需要其它的配置即可访问,缺陷是版本库必须在本地磁盘上,而且没有用户授权管理。
2)svnserve。在Subversion的手册中介绍:这是一个轻型的服务器,可以同客户端通过在TCP/IP基础上的自定义有状态协议通信。它默认使用3690端口并采用自定义的协议来提供服务,客户端使用svn://打头的URL访问服务器上的资源。
3)Apache+mod_dav_svn。这种方式更灵活(例如无须开放额外的端口),但它的配置会复杂一些。Subversion通过Apache使用WebDAV协议来提供服务,客户端使用标准的http://打头的URL访问服务器上的资源。
4)svnserve+SSH。在第二种方式的基础上增加了SSH封装以提高安全性,客户端使用svn+ssh://打头的URL访问服务器资源。
5)Apache+mod_dav_svn+SSL。在第三种方式的基础上增加了SSL加密,客户端使用https://打头的URL访问服务器上的资源。
关于各种访问方式更详细的信息请查阅Subversion的手册,本文暂时只介绍第二种和第三种方式。
3.2配置Apache+mod_dav_svn
3.2.1首先要保证Apache本身能正常工作,通常安装完Apache后通常就应该测试一下。
3.2.2停止Apache服务
3.2.3将Subversion安装目录下的子目录bin里的所有后缀为.so的文件复制到Apache安装目录下的modules目录里
3.2.4将Subversion安装目录下的子目录bin里的所有后缀为.dll的文件复制到Apache安装目录下的bin目录里
3.2.5使用记事本或其它纯文本编辑工具打开Apache安装目录下的conf目录里的httpd.conf文件
3.2.6找到配置文件中的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_module modules/mod_authz_svn.so
3.2.7在配置文件末尾添加如下段:
<Location /test>
DAV svn
SVNParentPath D:/svn_repos
AuthType Basic
AuthName "Subversion Reporsitory"
AuthUserFile D:/Apache2/conf/svnpasswd
AuthzSVNAccessFile D:/Apache2/conf/svnauthz
Require valid-user
</Location>
以下介绍每个选项的含义:
<Location /test> <Location> 要求Apache将路径中以/test/开头的部分交给该段中定义的代理处理
DAV svn 要求Apache将指定的路径交给指定的DAV提供者(此处为svn)处理
SVNParentPath 指定存放Subversion版本库的完整目录。如果只使用应该版本库,可以用SVNPath选项而不是本选项
AuthType 指定系统使用的认证类型。AuthType Basic使用基本的用户名+密码的认证方式。保存用户名和密码的文件由AuthUserFile选项指定
AuthName 指定系统请求用户认证时显示给客户端的说明信息
AuthUserFile 保存系统中允许的用户名及其密码。该文件通常用Apache的htpasswd工具维护
AuthzSVNAccessFile 保存版本库的访问权限定义。该文件的格式与配置方法参见第3.2.8小节
Require valid-user 要求访问版本库时必须提供合法的用户名和密码,禁止匿名访问
3.2.8配置版本库的访问权限
可以使用记事本或其它纯文本编辑工具来配置访问权限定义文件,该文件用于定义用户组和授权,但不包括用户和密码的管理。可以复制某个版本库的conf目录里的authz文件,在此基础上进行修改。在修改该配置文件前需要预先规划好版本库的目录结构,这些目录结构将对哪些用户或/和组开放,是允许读还是允许读写。该配置文件类似于一个ini文件,其中含有3种段:
1)groups段
在该段中定义组名及该组包括的用户名,格式为group_name = user1, user2, user3
2)未指定版本库的目录授权段
段名的格式为[/directory_name],directory_name是要授权的目录。因为没有指定版本库的名称,这种段通常适用于只有一个版本库的情况。
在该段中定义用户或组对该目录的访问授权,格式为user_name = privileges或@group_name = privileges,其中privileges可以是r,w,rw或空,对应的权限分别是读,写,读写或无权限。
3)指定版本库的目录授权段
段名的格式为[repository_name:/directory_name],其中repository_name是指定的版本库名称,通常为创建版本库时的顶级目录名称。
段中定义同第2)部分。
3.3配置svnserve
3.3.1配置版本库
当使用此方式时,需要为每个版本库进行配置,需要编辑repository_path\conf目录下的svnserve.conf、passwd和authz文件。
在svnserve.conf中提供了5个选项:
anon-access 指定匿名用户对版本库的访问权限,可以是read,write或none
auth-access 指定授权用户对版本库的访问权限,可以是read,write或none
password-db 保存用户名与密码的文件,默认为同目录里的passwd。注意该文件是明文的
authz-db 保存版本库的目录授权信息的文件,默认为同目录里的authz。该文件的格式参见第3.2.8小节
realm 为版本库指定一个用于验证的域名。如果不同的版本库使用了相同的验证域名,则它们的passwd文件应该是一样的,反之亦然
默认情况下以上选项均被注释掉了,在使用前需要去掉行首的#号,并进行适当的配置。如果打算仅允许客户端通过http:(或file:)+URL的方式访问,该文件不起作用,可以不理睬。
3.3.2启动Subversion守护进程。
执行svnserve --daemon --root D:/svn_repos/test即启动svnserve的一个实例,它以守护进程的方式运行,并保证对版本库的访问不会超出D:/svn_repos/test。
也可以使用第三方工具让其以Windows服务的方式运行。可以在http://clanlib.org/~Embn/svnservice/下载SVNService.zip,将其中的SVNService.exe解压到Subversion安装目录下的bin目录里,然后在命令行窗口执行svnservice -install -d -r "D:/svn_repos/test",执行该命令后在Windows的服务管理器中会出现一个名为SVNService的服务,使用服务管理器进行控制即可。
4.参考资料
Subversion自带的手册
浅水滩生活的Subversion Server For Windows安装指南
嘟嘟老窝的Subversion安装手记
louis的Subversion在linux和Windows下的安装步骤(http://www.easyea.com/doc/subversion/index.jsp)