目錄
一個Subversion的版本庫可以和客戶端同時運行在同一個機器上,使用file:///訪問,但是一個典型的Subversion設定應該包括一個單獨的伺服器,可以被辦公室的所有客戶端訪問—或者有可能是整個世界。
本小節描述了怎樣將一個Subversion的版本庫暴露給遠程客戶端,我們會覆蓋Subversion已存在的伺服器機制,討論各種方式的設定和使用。經過閱讀本小節,你可以決定你需要哪種網路設定,並且明白怎樣在你的主機上進行設定。
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 |
| 速度 | 有些慢 | 快一點 | 快一點 |
| 初始設定 | 有些複雜 | 極為簡單 | 相當簡單 |