2010-01-26 65 views
55

SVN网络访问共有四种协议。哪种协议? svn://或http(s)://?

svn://repos 
svn+ssh://repos 
https://repos 
http://repos 

维基百科页面并没有多说四种不同协议的差异。我一直倾向于svn://,因为它是最容易设置的,但有什么区别,哪一个更好?

回答

54

http://有一个严重开销,尤其是在处理数千个小文件时,我使用了svn作为一个包含大约50000个图标的网站,全部都保存在SVN中,使用HTTP,花费了大约20分钟的时间。切换到svn://,花了不到一分钟。这是因为使用HTTP时,每个文件都有一个新的HTTP请求。

http://然而,它有以下巨大优势:它通常经过防火墙。例如,现在我切换到svn://,因为他们的防火墙,我无法再从我的大学访问我的存储库。

关于使用SSL/TLS与否的区别,很明显:数据是加密的;但是设置起来更加困难。

+5

http(s)://的另一个优点是符合WebDAV标准。这意味着你可以将这样的存储库安装在例如资源管理器或其他WebDAV客户端。请参阅http://svnbook.red-bean.com/nightly/en/svn.webdav.html – Stefan 2010-01-27 15:03:50

+5

由于涉及巨大的开销和缺乏WebDAV客户端,Svn正在从v1.7开始移开WebDAV标准。 – whitey04 2011-12-14 12:20:32

+0

Downvoted,因为这个答案不再是实际的。 SVN 1.7和更高版本大大提高了HTTP(S)的使用率,svnserve的速度和HTTP(S)之间的差异并不是那么大。 – bahrep 2016-08-08 15:13:47

5

https://svn+ssh://被加密,因此用于传输安全数据(如您的SVN密码更安全。

如果它像混帐东西,svn+ssh://将快于https://svn://将快于http://

+1

我实际上并不知道有关svn + ssh的很多内容。服务器需要什么样的支持?你必须有一个在服务器上有一个shell的ssh帐户?没有匿名访问? – Earlz 2010-01-26 16:53:09

+0

SVN + SSH与svn://基本相同,只有你通过SSH隧道进行操作。如果匿名访问对您很重要,这不是您想要追求的选项。 – 2010-01-26 16:58:47

+0

@earlz:你需要某种类型的文件系统访问存储库的帐户,以及运行'svn'(或者其他二进制文件?)的权限。 – Thomas 2010-01-26 16:59:50

3

httphttps由Web服务器模块为Subversion支持处理,因此您可以使用基于HTTP的身份验证(通过.htaccess配置)来限制对存储库的访问)。

+2

那么,你也可以使用svnserve进行身份验证..它只是以一种稍微不同的方式完成的。 – 2010-01-26 16:57:14

+0

是的,如果您有100个存储库用于同一开发人员组,则需要在任何存储库中传输配置文件。这样,只能有一个允许它们访问的文件,并且其中的每个更改都将控制对任何存储库的访问 – Vestel 2010-01-26 17:01:24

+0

您可以使用svnserve +符号链接获得相同的效果。另外,为同一个开发人员组创建几个存储库是没有意义的,并且不会受官方svn书籍的影响。 – 2010-01-26 17:17:38

20

svn+ssh是在SSH隧道内运行的svn协议。客户端使用SSH登录远程服务器,并在该隧道中远程运行svn命令。在我看来,svn+ssh是在远程系统上使用Subversion版本库的最简单方法,因为您没有任何服务器可以在该系统上启动,假设您已经运行了SSH服务器。

另外,svn+ssh受益于SSH的加密保护。请勿在不可信网络上使用原始svn协议。

svn+ssh的主要问题是它需要在远程机器上进行shell访问。如果不允许他访问整个shell帐户,就很难提供对存储库的访问权限。为此,您需要基于HTTP的方法之一,即httphttps(由于加密和身份验证层,最好是https)。这些方法配置比较复杂(您需要HTTP/HTTPS服务器,例如Apache),但允许存储库管理员仔细并精确地控制存储库访问权限。

+0

使用svn + ssh,很容易限制对svn的访问。 – 2015-08-01 23:48:23

3

有人可能会说,svn://svn+ssh://提供比普通HTTP更好的性能和速度或安全的HTTPS时访问Subversion版本库,但现在不是这样。虽然svn://svn+ssh://比HTTP(S)更快,但与SVN 1.6或更低版本的差别并不那么大。

no HTTP(S)和最新的Subversion 1.7+客户端和服务器的主要性能问题。

使用Subversion 1.7的HTTP(S)访问became much more performant and especially on high-latency network connections thanks to HTTPv2(不要与HTTP/2混淆!)Subversion 1.8 switched from libneon to libserf for HTTP(S) accesslibserflibneon提供更好的性能。

如果您认为某些问题与HTTP(S)或Subversion在HTTP(S)上的性能有关,则应该调查网络上是否存在任何使HTTP(S)变慢的服务。根本原因可能是防病毒,主动防火墙或代理。更不用说错误配置的网络设置。不要忘记使用最新的Subversion客户端和服务器!

想到网络配置错误的例子,似乎有一个相当普遍的问题,它影响到在无法访问Windows更新站点(http://ctldl.windowsupdate.com/)的断开网络上工作的客户端计算机。这是影响各种系统服务的关键问题,但最终用户在通过HTTPS使用Subversion客户端时会注意并报告。问题看起来与性能有关,但事实并非如此。阅读这StackOverflow线程获取更多信息:https://stackoverflow.com/a/38499619/761095