SVN的网络访问有四种常见协议。
svn://repos
svn+ssh://repos
https://repos
http://repos
维基百科页面对这四种协议的区别没有多少说明。我一直喜欢使用 svn://
,因为它很容易设置,但它们之间有什么区别,哪一个更好呢?
http://
在处理成千上万个小文件时,存在严重的开销问题。我曾为一个包含大约 50,000 个图标的网站使用 svn。使用 HTTP 协议进行检出需要大约 20 分钟的时间。而一旦我切换到 svn://
,检出时间只需要不到一分钟。这是因为使用 HTTP 协议时每个文件都需要新建一个 HTTP 请求。
然而,http://
有以下一个很大的优势:通常能够穿过防火墙。例如,现在我已经切换到 svn://
,就无法从我的大学访问我的代码库了,因为大学使用的是防火墙。
关于使用 SSL/TLS 或不使用的区别,显而易见:数据被加密,但是设置起来更加困难。
svn+ssh
是在 SSH 隧道内运行的 svn
协议。客户端使用 SSH 登录远程服务器,并在该隧道中远程运行 svn 命令。在我看来,svn+ssh
是在远程系统上使用 Subversion 仓库的最简单方法,因为你不需要在该系统上启动任何服务器,假设你已经有一个运行 SSH 服务器的环境。
此外,svn+ssh
受到 SSH 的加密保护。不要在不受信任的网络上使用原始的 svn
协议。
svn+ssh
的主要问题是它需要远程机器上的 shell 访问权限。很难让某人访问仓库而不给他整个 shell 帐户的访问权限。为此,你需要 HTTP-based 方法之一,即 http
或 https
(最好选择 https
,因为它包含了加密和认证层)。这些方法更复杂配置(你需要一个 HTTP/HTTPS 服务器,例如 Apache),但允许仓库管理员精确控制仓库访问权限。
https://
和svn+ssh://
都是加密的,因此更安全。这些协议可用于传输安全数据(例如您的SVN密码)。
如果类似于Git,svn+ssh://
比https://
更快,而svn://
比http://
更快。
svn://
或svn+ssh://
比普通的HTTP或安全的HTTPS提供更好的性能和速度,但现在这并不是真的。虽然svn://
或svn+ssh://
比HTTP(S)更快,但差异不像在SVN 1.6或早期版本中那样大。
使用最新的Subversion 1.7+客户端和服务器,HTTP(S)没有主要性能问题。
Subversion 1.7实现了HTTP(S)访问,由于使用了HTTPv2协议,在高延迟网络连接上表现得更加出色(不要与HTTP/2混淆!)。Subversion 1.8从libneon
切换到libserf
以进行HTTP(S)访问,而libserf
比libneon
提供更好的性能。
如果您认为HTTP(S)或Subversion在HTTP(S)上运行的性能存在问题,您应该调查是否有任何网络服务使HTTP(S)变慢。根本原因可能是杀毒软件、活动防火墙或代理。更不用说网络设置配置错误了。别忘了使用最新的Subversion客户端和服务器!
在考虑网络配置问题的例子时,似乎存在一个相当普遍的问题,影响了在没有访问Windows更新站点(http://ctldl.windowsupdate.com/)的断开网络上工作的客户端计算机。这是一个关键性问题,影响了广泛的系统服务,但仅在使用HTTPS的Subversion客户端时,最终用户才会注意到并报告此问题。该问题看起来与性能有关,但实际上并非如此。请查看此StackOverflow线程以获取更多信息:https://stackoverflow.com/a/38499619/761095。
http
和https
由Subversion支持的Web服务器模块处理,因此你可以使用基于HTTP的身份验证(通过.htaccess配置)来限制对你的仓库的访问。
svnserve
和Apache上的HTTP(S)之间的速度差异并不是那么大。 - bahrep