專(zhuān)家精辟講解SVN與CVS的區(qū)別
本節(jié)主要介紹SVN與CVS的區(qū)別,上節(jié)已經(jīng)介紹了一部分,不夠完整,本節(jié)繼續(xù)介紹SVN與CVS的區(qū)別,希望本文能教會(huì)你更多東西。
雙向的差異化-壓縮網(wǎng)絡(luò)傳輸
通過(guò)雙向的差異化-壓縮網(wǎng)絡(luò)傳輸看SVN與CVS的區(qū)別:CVS對(duì)二進(jìn)制文件不能進(jìn)行有效的差異化處理。對(duì)于文本文件,CVS僅僅支持單向的差異化傳輸:從CVS服務(wù)器到客戶端的傳輸是差異化的,即執(zhí)行cvsupdate時(shí),只有差異的部分從服務(wù)器傳輸?shù)娇蛻舳耍欢?dāng)執(zhí)行cvscommit時(shí),無(wú)論代碼變化多少,CVS都需要從客戶端向服務(wù)器完整傳輸被修改文件的全部?jī)?nèi)容,不能只傳輸差異。相反,無(wú)論是文本文件還是二進(jìn)制文件,Subversion都進(jìn)行雙向的差異化傳輸,并且差異化內(nèi)容還要進(jìn)行壓縮/解壓縮的過(guò)程:在服務(wù)器端獲取差異顯而易見(jiàn),與CVS類(lèi)似;Subversion在客戶端獲取差異的秘密在于—Subversion在客戶端的工作拷貝中隱含了每個(gè)文件的一個(gè)“只讀的、干凈的”副本(該副本隱藏在隱含目錄.svn里,通常不可見(jiàn),該副本還有更多的妙用,參見(jiàn)“十二、更多的本地/離線操作”),通過(guò)比較用戶在客戶端的修改和該隱含的副本,Subversion獲取需要真正傳送到服務(wù)器的差異,并對(duì)差異進(jìn)行壓縮后才進(jìn)行網(wǎng)絡(luò)傳輸。
對(duì)CVS而言,操作的成本(網(wǎng)絡(luò)帶寬消耗是最大的操作成本)與被修改的文件的大小成比例,而與修改本身的大小無(wú)關(guān);對(duì)Subversion而言,操作成本只與修改本身的大小成比例,而與被修改的文件的大小無(wú)關(guān)。因此,與CVS相比,Subversion消耗更少的網(wǎng)絡(luò)帶寬(以客戶端的存儲(chǔ)空間換取更少的帶寬消耗在目前的計(jì)算環(huán)境下應(yīng)該是個(gè)相當(dāng)不錯(cuò)的選擇!)。Subversion更加適合基于互聯(lián)網(wǎng)(或廣域網(wǎng))進(jìn)行協(xié)作開(kāi)發(fā)的地理上分布的團(tuán)隊(duì)—版本服務(wù)器集中、單一;客戶端廣泛分布。
高效、快捷創(chuàng)建分支和基線
通過(guò)高效、快捷創(chuàng)建分支和基線看SVN與CVS的區(qū)別:CVS和Subversion都支持分支(branch)和基線(tag),通過(guò)分支與合并,可以有效支持大項(xiàng)目的并行開(kāi)發(fā)模式;通過(guò)基線管理,可以準(zhǔn)確標(biāo)識(shí)一組文件的版本,有效進(jìn)行軟件發(fā)布管理和必要時(shí)的歷史回溯。但CVS和Subversion在實(shí)現(xiàn)分支和基線的方式上存在很大的不同。CVS在創(chuàng)建分支的時(shí)候,需要對(duì)所有進(jìn)行分支的文件進(jìn)行依次的操作,因此分支的建立成本(主要是建立分支所需的時(shí)間,或消耗的計(jì)算資源)與參與分支的文件數(shù)量成比例,項(xiàng)目越大,版本庫(kù)越大,文件越多,分支的建立成本越高;基線(tag)的建立與此類(lèi)似。
Subversion的分支和基線是通過(guò)執(zhí)行“拷貝”來(lái)建立的:回想一下在沒(méi)有引入版本管理工具的時(shí)候我們是如何進(jìn)行所謂的“分支”和“基線”管理的?答案顯然是“拷貝”—我們通過(guò)“拷貝”或“備份”來(lái)建立基線;同樣,為支持多個(gè)開(kāi)發(fā)人員可以同時(shí)進(jìn)行開(kāi)發(fā),我們?yōu)槊總€(gè)開(kāi)發(fā)人員創(chuàng)建一份“拷貝”。由于Subversion的全局版本號(hào)特性,Subversion中分支或基線的創(chuàng)建過(guò)程,或Subversion中的“拷貝”過(guò)程,真正的操作是在版本庫(kù)中創(chuàng)建一個(gè)到某一全局版本號(hào)的指針(pointer),不再需要針對(duì)眾多的單個(gè)文件依次執(zhí)行操作。因此,該操作的成本為一個(gè)很小的常數(shù),與項(xiàng)目大小,版本庫(kù)大小,文件數(shù)目的多少無(wú)關(guān);并且,分支或基線的建立不需要進(jìn)行版本的冗余存儲(chǔ),新建立的分支或基線基本不占用版本庫(kù)空間,分支的后續(xù)存儲(chǔ)空間的開(kāi)銷(xiāo)也只與修改的大小有關(guān)。
集成ApacheWebServer,提供更多的特性
通過(guò)集成ApacheWebServer,提供更多的特性看SVN與CVS的區(qū)別: Subversion通過(guò)與ApacheWebServer的集成,可以提供基于http/https協(xié)議的版本庫(kù)訪問(wèn)機(jī)制,從而支持Subversion跨越防火墻的安全訪問(wèn)。除此以外,Subversion還可以利用更多的Apache特性,包括但不限于:Apache豐富的用戶認(rèn)證機(jī)制(包括通過(guò)LDAP服務(wù)器如WindowsActiveDirectory服務(wù)器的用戶認(rèn)證),基于目錄路徑的精細(xì)粒度的訪問(wèn)控制,對(duì)傳輸?shù)木W(wǎng)絡(luò)流量進(jìn)行壓縮/解壓縮,瀏覽版本庫(kù)目錄結(jié)構(gòu)等等。
支持WebDAV
通過(guò)是否支持WebDAV看SVN與CVS的區(qū)別:WebDAV(Web-basedDistributedAuthoringandVersioning)是一種基于HTTP1.1協(xié)議的通信協(xié)議.它擴(kuò)展了HTTP1.1,在GET、POST、HEAD等幾個(gè)HTTP標(biāo)準(zhǔn)方法以外添加了一些新的方法,使應(yīng)用程序可直接對(duì)WebServer直接讀寫(xiě),并支持寫(xiě)文件鎖定(Locking)及解鎖(Unlock),還可以支持文件的版本控制。Subversion通過(guò)與ApacheWebServer的集成,支持WebDAV協(xié)議,使得業(yè)務(wù)用戶(businessusers)或非技術(shù)用戶在不安裝任何版本管理客戶端的情況下輕松訪問(wèn)Subversion版本庫(kù),不改變業(yè)務(wù)用戶已有使用習(xí)慣,支持分布的業(yè)務(wù)用戶對(duì)文檔的評(píng)審、修改并實(shí)現(xiàn)版本控制,真正將軟件開(kāi)發(fā)的生命周期從開(kāi)發(fā)/技術(shù)團(tuán)隊(duì)擴(kuò)展到項(xiàng)目的全部干系人(stakeholder),避免通過(guò)電子郵件傳遞文檔的混亂與無(wú)序、通過(guò)Windows操作系統(tǒng)共享造成的安全漏洞、病毒攻擊、歷史版本被覆蓋或丟失、審計(jì)困難等諸多典型問(wèn)題。
【編輯推薦】
- MyEclipse6.0集成SVN及配置詳解
- CentOS系統(tǒng)中安裝subversion并使用svn+ssh訪問(wèn)
- 基于Java的svn客戶端工具JavaSVN 1.1.0.beta發(fā)布
- 如何結(jié)合使用Subversion和Eclipse
- Subversion日期解析函數(shù)緩沖區(qū)溢出漏洞