5. 创建文件库
Subversion 所提供的 svnadmin 工具, 有个专门处理这件事的子命令. 要建立一个新的档案库, 只要执行:
$ svnadmin create /usr/svn/repos/test
这样就在“/usr/svn/repos”目录下创建了一个test档案库,其中档案库的路径为“/usr/svn/repos/test”
注意:svnadmin工具的默认路径为“/usr/local/bin/svnadmin”
在你执行 svnadmin create 命令之后, 这个目录中就会有全新的 Subversion 档案库. 让我们看一下在这个目录里产生了什么东西.
$ ls /usr/svn/repos/test
dav/ db/ format hooks/ locks/ README.txt
除了 README.txt 与 format 檔以外, 档案库是由一群子目录组成. 就像 Subversion 其它部份的设计一样, 模块化是很重要的原则, 而且阶层式组织要比杂乱无章好. 以下是新的档案库目录中, 各个项目的简单叙述:
dav
提供给 Apache 与 mod_dav_svn 使用的目录, 让它们储存内部数据.
db
主要的 Berkeley DB 环境, 里面都是储存 Subversion 档案系统 (就是你置于版本控制的全部数据所在) 的数据库表格.
format
一个内容为一个整数的档案, 表示档案库配置的版本号码.
hooks
一个放置 hook 脚本文件模板的目录 (如果你有安装的话, 还有脚本档本身的档案).
locks
用来放置 Subversion 档案库锁定数据的目录, 用来追踪存取档案库的客户端.
README.txt
这个档案只是用来告知使用者, 他们在看的是 Subversion 的档案库.
6. Apache配置
SVN可以同过两种方式提供客户端对档案库的访问。
采用Apache HTTP 服务器 (httpd)。使用WebDAV/deltaV 通讯协议与客户端交互, 这个通讯协议 (它是 HTTP 1.1 的扩充; 请参照 http://www.webdav.org/) 采用广为使用的 HTTP 通讯协议。
采用SVN自带的svnserve服务器。这个程序要比 Apache 更轻便, 而且更容易设定,它会与 Subversion 客户端透过 TCP/IP 联机以自订的通讯协议沟通。
我们采用了Apache服务器的方式,配置的具体步骤如下:
1).Apache需要加载模块
为了使客户端能够通过Apache来访问SVN档案库,Apache需要加载一个特殊的模块mod_dav_svn。如果您的Apache是按照与预设目录安装的,mod_dav_svn 模块应该会安装在 Apache 安装位置 (默认路径是 /usr/local/apache2) 的 modules 子目录内。同时在Apache的配置文件httpd.conf(默认路径为/usr/local/apache2/conf)中已经使用LoadModule指令加载了该模块(这是安装过程中自动添加)。LoadModule 指令的语法很简单, 就是将一个具名模块对映到共享链接库在磁盘上的位置:
LoadModule dav_svn_module modules/mod_dav_svn.so
注意这个指令必须出现在其它的 Subversion 相关指令之前。
2).配置匿名访问
使客户端能够通过Apache访问资源库还需要告诉Apache资源库的位置,这需要我们在htppd.conf中加入Location指令来配置。
<Location /test>
DAV svn
SVNPath /usr/svn/repos/test
</Location>=
其中DAV表示处理方式,SVNPath是SVN档案库的位置。
这样你就可以使用http://servername/test来访问档案库。
如果你计划支持多个 Subversion 档案库, 而它们都有着共同的本地磁盘路径, 你可以使用另一种指令 SVNParentPath, 指示它们共同的父路径。如果我们在路径 /usr/svn 之下建立多个 Subversion 档案库, 并以http://servername/svn/repos1,http://servername/svn/repos2 等等的 URL 供人存取, 你可以使用下面中的 httpd.conf 设定语法:
<Location /svn>
DAV svn
SVNParentPath /usr/svn/repos
</Location>
使用前述的语法, Apache 会将所有路径以 /svn/ 开始的 URL 都交给 Subversion DAV 供应模块处理, 它会假设任何以 SVNParentPath 指令指定的目录都是 Subversion 档案库。 不像SVNPath, 这个相当便利的语法可以让你在建立新的档案库时, 仍旧不必重跑 Apache。 这时我们可以同过http://servername/svn/test来访问我们刚才的档案库,同样如果/usr/snv/repos/目录中还有档案库cvsrepos,我们可以通过http://servername/svn/cvsrepos来访问,并不需要重新配置。
3).配置用户验证
我们使用最简单的是基本验证机制,它只会使用使用者名称与密码, 用以确认使用者是他所声称的身份。Apache 提供了htpasswd 工具程序,来管理接受的使用者名称与密码,也就是你想要授与存取 Subversion 档案库权限的使用者。 让我们授与 Sally 与 Harry 送交存取的权限。 首先, 我们必须把它们加入到密码档案。
$ ### 第一次: 以 -c 建立档案
$ htpasswd -c /etc/svn-auth-file harry
New password: *****
Re-type new password: *****
Adding password for user harry
$ htpasswd /etc/svn-auth-file sally
New password: *******
Re-type new password: *******
Adding password for user sally
$
接着, 你需要在 httpd.conf 的 Location 区块中新增几个指令, 告诉 Apache 如何处理你的新密码文件。
AuthType 指令指定应使用何种认证系统。 在目前的状况中, 我们想要指定 Basic 认证系统。
AuthName 是一个任意的名称, 让你用来指定认证领域 (authentication domain)。 大多数的浏览器在向使用者询问使用者代号与密码时, 会将这个名称显示在弹出的对话框中。
AuthUserFile 指令指定你以 htpasswd 产生的密码文件
Require 指令指定只有通过验证的用户才能访问。
在新增这四个指令后, 你的 <Location> 区块看起来应该像这样:
<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/svn-auth-file
Require valid-user
</Location>
现在如果你重新启动 Apache, 任何需要认证的 Subversion 动作都会从 Subversion 客户端取得使用者代号与密码, 这可能是使用先前置于快取的值, 或是向使用者询问。
7. 把CVS档案库转换为SVN档案库