2010-01-26 66 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