本手册旨在介绍 Subversion 1.6.x 系列版本。如果您正在运行其他版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/,并查阅适合您 Subversion 版本的手册。
Subversion 的设计理念是抽象的仓库访问层。这意味着任何类型的服务器进程都可以以编程方式访问仓库,而客户端 “仓库访问” API 允许程序员编写能够与相关网络协议通信的插件。理论上,Subversion 可以使用无数种网络实现。实际上,目前只有两种 Subversion 服务器被广泛使用。
Apache 是一款非常流行的 Web 服务器;使用 mod_dav_svn 模块,Apache 可以访问仓库并通过 WebDAV/DeltaV 协议(HTTP 的扩展)将其提供给客户端。由于 Apache 是一款非常可扩展的服务器,因此它提供了一些 “免费” 功能,例如加密的 SSL 通信、日志记录、与多个第三方身份验证系统的集成以及有限的内置仓库 Web 浏览功能。
另一个选择是 svnserve:一款小型轻量级服务器程序,它使用自定义协议与客户端通信。由于其协议是专门为 Subversion 设计的,并且是有状态的(与 HTTP 不同),因此它提供了明显更快的网络操作——但同时也牺牲了一些功能。虽然它可以使用 SASL 提供各种身份验证和加密选项,但它没有日志记录或内置 Web 浏览功能。然而,它非常易于设置,通常是小型团队开始使用 Subversion 时最佳选择。
svnserve 使用的网络协议也可以通过 SSH 连接进行隧道传输。这种 svnserve 部署选项在功能上与传统的 svnserve 部署有很大不同。SSH 用于加密所有通信。SSH 也用于身份验证,因此服务器主机上需要使用真实系统帐户(与 vanilla svnserve 不同,它拥有自己的私有用户帐户)。最后,由于此设置要求每个用户启动一个私有、临时的 svnserve 进程,因此从权限角度来看,它相当于允许一组本地用户通过 file://
URL 访问仓库。基于路径的访问控制没有任何意义,因为每个用户都直接访问仓库数据库文件。
表 6.1,“Subversion 服务器选项比较” 提供了三种典型服务器部署的简要总结。
表 6.1. Subversion 服务器选项比较
功能 | Apache + mod_dav_svn | svnserve | svnserve 通过 SSH |
---|---|---|---|
身份验证选项 | HTTP 基本或摘要身份验证、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 请求级别的详细日志记录 | 仅高级操作日志记录 | 仅高级操作日志记录 |
互操作性 | 其他 WebDAV 客户端可以访问 | 仅与 svn 客户端通信 | 仅与 svn 客户端通信 |
Web 查看 | 有限的内置支持,或通过第三方工具(如 ViewVC) | 仅通过第三方工具(如 ViewVC) | 仅通过第三方工具(如 ViewVC) |
主从服务器复制 | 从服务器到主服务器的透明写入代理可用 | 只能创建只读从服务器 | 只能创建只读从服务器 |
速度 | 稍微慢一些 | 稍微快一些 | 稍微快一些 |
初始设置 | 稍微复杂一些 | 非常简单 | 中等简单 |