概述
Subversion的设计包括一个抽象的网络层,这意味着版本库可以通过各种服务器进程访问,而且客户端“版本库访问”的API允许程序员写出相关协议的插件,理论上讲,Subversion可以使用无限数量的网络协议实现,目前实践中只有两种服务器。
Apache是最流行的web服务器,通过使用mod_dav_svn模块,Apache可以访问版本库,并且可以使客户端使用HTTP的扩展协议WebDAV/DeltaV进行访问,因为Apache是一个非常易于扩展的web服务器,它提供了许多“易于获取的”特性,例如加密的SSL通讯,日志和与第三方工具的集成,以及内置的版本库web浏览功能。
在另一个角落是svnserve:一个更小,轻型的服务器程序,同客户端使用自定义的协议。因为协议是为Subversion专门设计的,并且是有状态的(不像HTTP),它提供了更快的网络操作—但也有一些代价。它只理解CRAM-MD5的认证,然而它非常易于配置,是开始使用Subversion的小团队的最佳选择。
第三个选择是使用SSH连接包裹的svnserve,尽管这个场景依然使用svnserve,它与传统的svnserve部署非常不同,SSH在多所有的通讯中使用加密方式,SSH也使用排他的认证,所以在服务器主机(svnserve与之不同,它包含了自己的私有用户帐号)上必须要有真实的系统帐户。最后,因为这些配置需要每个用户发起一个私有的临时svnserve进程,这与允许一组本地用户通过file://
协议访问等同(从访问许可的视点)。因此路径为基础的访问控制变得没有意义,因为每个用户都可以直接访问版本库。
下面是三种典型服务器部署的总结。
表 6.1. Subversion服务器选项比较
特性 | Apache + mod_dav_svn | svnserve | svnserve over SSH |
---|---|---|---|
认证选项 | HTTP(S) basic auth、X.509 certificates、LDAP、NTLM或任何Apache httpd已经具备的方式 | CRAM-MD5 | SSH |
用户帐号选项 | 私有的'users'文件 | 私有的'users'文件 | 系统帐号 |
授权选项 | 可以授予整个版本库的读/写权限,也可以指定目录的。 | 可以授予整个版本库的读/写权限,也可以指定目录的。 | 只能对版本库整体赋予读/写权限 |
加密 | 通过可选的 SSL | 无 | SSH通道的 |
Logging | 对每个HTTP请求记录完全的Apache日志,通过选项“高级”记录普通的客户端操作。 | no logging | no logging |
交互性 | 可以部分的被其他WebDAV客户端使用 | 只同svn客户端通讯 | 只同svn客户端通讯 |
Web浏览能力 | 有限的内置支持,或者通过第三方工具,如ViewVC | 只有通过第三方工具,如 ViewVC | 只有通过第三方工具,如 ViewVC |
速度 | 有些慢 | 快一点 | 快一点 |
初始设置 | 有些复杂 | 极为简单 | 相当简单 |