本文档旨在描述 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)
主从服务器复制 从服务器到主服务器的透明写入代理可用 只能创建只读从服务器 只能创建只读从服务器
速度 稍微慢一些 稍微快一些 稍微快一些
初始设置 稍微复杂一些 极其简单 中等简单