本文档旨在介绍 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_svnsvnservesvnserve 通过 SSH
身份验证选项HTTP(S) 基本身份验证、X.509 证书、LDAP、NTLM 或 Apache httpd 可用的任何其他机制CRAM-MD5SSH
用户帐户选项私有“用户”文件私有“用户”文件系统帐户
授权选项可以授予对整个存储库的读/写访问权限,或指定每个路径。可以授予对整个存储库的读/写访问权限,或指定每个路径。只能授予对整个存储库的读/写访问权限
加密通过可选的 SSLSSH 隧道
日志记录每个 HTTP 请求的完整 Apache 日志,以及可选的“高级”客户端操作一般日志无日志记录无日志记录
互操作性其他 WebDAV 客户端可以部分使用只与 svn 客户端通信只与 svn 客户端通信
Web 浏览有限的内置支持,或通过第三方工具(如 ViewVC)只能通过第三方工具(如 ViewVC)只能通过第三方工具(如 ViewVC)
速度稍微慢一些稍微快一些稍微快一些
初始设置稍微复杂非常简单中等简单