This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

概览

Subversion 具有一个抽象的仓库访问层, 这就意味着仓库可以 被任意类型的服务器进程以程序化地方式进行访问, 并且客户端 仓库访问 API 允许程序员编写协议相关的插件. 从理论上讲, Subversion 支持 任意类型的网络实现, 但在实际使用中, 只有两种 Subversion 服务器用得比较 广泛.

Apache HTTP 服务器 (也被称作 httpd) 是一 个非常流行的网页服务器; 利用 mod_dav_svn 模块, Apache 就能访问仓库, 并通过 WebDAV/DeltaV 协议支持客户端访问, WebDAV/DeltaV 协议是 HTTP 的扩展. 因为 Apache 的可扩展性非常强, 它提供 了大量可 免费 使用的特性, 例如加密的 SSL 通信, 日志记录, 可集成第三方认证系统, 受限的仓库网页访问界面.

另一种就是 svnserve: 一种小型的轻量级服务 器程序, 使用定制的协议与客户端通信. 因为它所使用的协议是专为 Subversion 而设计的有状态协议 (相对于无状态的 HTTP 协议), 它提供了更快速的网络操作 —但同时也要付出一些代价. 虽然 svnserve 可以利用 SASL 提供各种各样的认证和加密选项, 但它不支持日志记录和网页浏览. 然而, 搭建 svnserve 服务器非常方便, 非常适合刚开始接触 Subversion 的小型团队.

svnserve 所使用的协议还能被 SSH 包裹, 这种部署 形式和以传统方式部署的 svnserve 相比, 在特性上有很 大的不同. 此时 SSH 将用于加密所有的连接, 只使用 SSH 进行认证, 这就要求 用户在服务器主机上必须拥有真实的系统账户 (而普通的 svnserve 拥有一套自己的用户账户). 最后, 这种部署 配置要求每个用户都要派生一个私有的临时 svnserve 进程, (从系统权限的角度来看) 这就相当于允许一组本地用户使用 file:// URL 访问仓库, 基于路径的访问控制将失去意义, 因为用户是在直接访问仓库的数据库文件.

表 6.1 “各种 Subversion 服务器选项的比较” 总结了三种典型 的服务器部署方式.

表 6.1. 各种 Subversion 服务器选项的比较

特性 Apache + mod_dav_svn svnserve svnserve + SSH
认证选项 HTTP Basic or Digest 认证, X.509 证书, LDAP, NTLM, 或 Apache httpd 支持的其他认证机制 默认是 CRAM-MD5; LDAP, NTLM, 或 SASL 支持的其他认证机制 SSH
用户帐户选项 私有的 用户 文件, 或 Apache httpd 支持的 其他机制 (LDAP, SQL 等) 私有的 用户 文件, 或 SASL 支持的其他机制 (LDAP, SQL 等) 系统账户
授权选项 可以在整个仓库或特定的路径上授予读/写权限 可以在整个仓库或特定的路径上授予读/写权限 只能在整个仓库上授予读/写权限
加密 通过可选的 SSL (https) 实现 通过可选的 SASL 特性实现 由 SSH 连接实现
日志记录 支持在较高的层次上记录 Subversion 操作, 也支持为每一个 HTTP 请求记录日志 只支持从较高的层次上记录 Subversion 操作 只支持从较高的层次上记录 Subversion 操作
互操作性 其他 WebDAV 客户端可访问 只能被 svn 客户端访问 只能被 svn 客户端访问
网页浏览 有限的内建支持, 或者通过第三方工具实现, 例如 ViewVC 只能通过第三方工具实现, 例如 ViewVC 只能通过第三方工具实现, 例如 ViewVC
主从服务器复制 从服务器到主服务器可以使用透明的写代理 只能创建只读的从服务器 只能创建只读的从服务器
访问速度 较慢 较快 较快
初始设置 较复杂 非常简单 中等