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