本文档旨在介绍 Subversion 1.4。如果您正在运行更新版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的书籍。
Subversion 的设计基于抽象的网络层。这意味着存储库可以被任何类型的服务器进程以编程方式访问,并且客户端“存储库访问”API 允许程序员编写使用相关网络协议的插件。理论上,Subversion 可以使用无限数量的网络实现。实际上,在撰写本文时,只有两种服务器。
Apache 是一款非常流行的 Web 服务器;使用 mod_dav_svn 模块,Apache 可以访问存储库,并通过 WebDAV/DeltaV 协议(HTTP 的扩展)将其提供给客户端。由于 Apache 是一款非常可扩展的 Web 服务器,因此它免费提供了一些功能,例如加密的 SSL 通信、日志记录、与多个第三方身份验证系统的集成以及有限的存储库内置 Web 浏览功能。
另一个选择是 svnserve:一个小型、轻量级的服务器程序,它使用自定义协议与客户端通信。由于它的协议是专门为 Subversion 设计的,并且是有状态的(不像 HTTP),因此它提供了明显更快的网络操作,但也以牺牲一些功能为代价。它只理解 CRAM-MD5 身份验证,没有日志记录、没有 Web 浏览功能,也没有加密网络流量的选项。但是,它非常易于设置,对于刚刚开始使用 Subversion 的小型团队来说,通常是最佳选择。
第三种选择是使用通过 SSH 连接隧道化的 svnserve。即使这种情况仍然使用 svnserve,但在功能上与传统的 svnserve 部署有很大不同。SSH 用于加密所有通信。SSH 还专门用于身份验证,因此需要在服务器主机上使用真实系统帐户(不像 vanilla svnserve,它有自己的私有用户帐户)。最后,由于这种设置要求每个用户都启动一个私有的、临时的 svnserve 进程,因此它等同于(从权限的角度来看)允许一组本地用户通过 file:// URL 访问存储库。基于路径的访问控制没有意义,因为每个用户都直接访问存储库数据库文件。
以下是三种典型服务器部署的快速摘要。
表 6.1 Subversion 服务器选项比较
| 功能 | Apache + mod_dav_svn | svnserve | svnserve 通过 SSH |
|---|---|---|---|
| 身份验证选项 | HTTP(S) 基本身份验证、X.509 证书、LDAP、NTLM 或 Apache httpd 可用的任何其他机制 | CRAM-MD5 | SSH |
| 用户帐户选项 | 私有“用户”文件 | 私有“用户”文件 | 系统帐户 |
| 授权选项 | 可以授予对整个存储库的读/写访问权限,或指定每个路径。 | 可以授予对整个存储库的读/写访问权限,或指定每个路径。 | 只能授予对整个存储库的读/写访问权限 |
| 加密 | 通过可选的 SSL | 无 | SSH 隧道 |
| 日志记录 | 每个 HTTP 请求的完整 Apache 日志,以及可选的“高级”客户端操作一般日志 | 无日志记录 | 无日志记录 |
| 互操作性 | 其他 WebDAV 客户端可以部分使用 | 只与 svn 客户端通信 | 只与 svn 客户端通信 |
| Web 浏览 | 有限的内置支持,或通过第三方工具(如 ViewVC) | 只能通过第三方工具(如 ViewVC) | 只能通过第三方工具(如 ViewVC) |
| 速度 | 稍微慢一些 | 稍微快一些 | 稍微快一些 |
| 初始设置 | 稍微复杂 | 非常简单 | 中等简单 |