本文档旨在描述 Apache™ Subversion® 的 1.7.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 也被专门用于身份验证,因此服务器主机上需要使用真实的系统帐户(与普通的 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 |
用户帐户选项 | 私有 “users” 文件,或 Apache httpd 可用的其他机制(LDAP、SQL 等) | 私有 “users” 文件,或 SASL 可用的其他机制(LDAP、SQL 等) | 系统帐户 |
授权选项 | 可以授予对整个存储库的读写访问权限,或按路径指定 | 可以授予对整个存储库的读写访问权限,或按路径指定 | 只能授予对整个存储库的读写访问权限 |
加密 | 通过可选的 SSL(https)提供 | 通过可选的 SASL 功能提供 | SSH 连接固有 |
日志记录 | Subversion 操作的高级操作日志记录,以及每个 HTTP 请求级别的详细日志记录 | 仅高级操作日志记录 | 仅高级操作日志记录 |
互操作性 | 可被其他 WebDAV 客户端访问 | 仅与 svn 客户端通信 | 仅与 svn 客户端通信 |
Web 查看 | 有限的内置支持,或通过第三方工具(如 ViewVC) | 仅通过第三方工具(如 ViewVC) | 仅通过第三方工具(如 ViewVC) |
主从服务器复制 | 从服务器到主服务器的透明写入代理可用 | 只能创建只读从服务器 | 只能创建只读从服务器 |
速度 | 稍微慢一些 | 稍微快一些 | 稍微快一些 |
初始设置 | 稍微复杂一些 | 极其简单 | 中等简单 |