本文字档尚未完善,内容会频繁变更,可能与任何已发布版本的 Apache™ Subversion® 软件不符。 建议不要将此页面设为书签,也不要推荐他人访问此页面。 请访问 https://svnbook.subversion.org.cn/ 获取本书的稳定版本。
Subversion 的设计采用了抽象的仓库访问层。 这意味着任何类型的服务器进程都可以以编程方式访问仓库,并且客户端的 “仓库访问” API 允许程序员编写支持相关网络协议的插件。 从理论上讲,Subversion 可以使用无限数量的网络实现。 实际上,目前只有两种广泛使用的 Subversion 服务器。
Apache HTTP Server(也称为 httpd)是一种非常流行的 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 | 通过 SSH 的 svnserve |
---|---|---|---|
身份验证选项 | HTTP Basic 或 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 请求级别的详细日志记录 | 仅记录高级操作 | 仅记录高级操作 |
互操作性 | 可被其他 WebDAV 客户端访问 | 仅与 svn 客户端通信 | 仅与 svn 客户端通信 |
Web 查看 | 有限的内置支持,或通过第三方工具(如 ViewVC) | 仅通过第三方工具(如 ViewVC) | 仅通过第三方工具(如 ViewVC) |
主从服务器复制 | 从从服务器到主服务器的透明写入代理可用 | 只能创建只读从服务器 | 只能创建只读从服务器 |
速度 | 速度稍慢 | 速度稍快 | 速度稍快 |
初始设置 | 稍微复杂 | 极其简单 | 中等简单 |