CVS功能vsSVN功能,誰更勝一籌
本節(jié)繼續(xù)介紹SVN功能和CVS功能對比介紹,通過本節(jié)的介紹你一定會對SVN功能和CVS功能有清晰的認(rèn)識,在以后使用過程中你就會有針對性的進行選擇了,歡迎大家一起來學(xué)習(xí)。
八、高效、快捷創(chuàng)建分支和基線
CVS和SVN功能中都支持分支(branch)和基線(tag),通過分支與合并,可以有效支持大項目的并行開發(fā)模式;通過基線管理,可以準(zhǔn)確標(biāo)識一組文件的版本,有效進行軟件發(fā)布管理和必要時的歷史回溯。
但CVS和SVN在實現(xiàn)分支和基線的方式上存在很大的不同。CVS在創(chuàng)建分支的時候,需要對所有進行分支的文件進行依次的操作,因此分支的建立成本(主要是建立分支所需的時間,或消耗的計算資源)與參與分支的文件數(shù)量成比例,項目越大,版本庫越大,文件越多,分支的建立成本越高;基線(tag)的建立與此類似。
SVN的分支和基線是通過執(zhí)行“拷貝”來建立的:回想一下在沒有引入版本管理工具的時候我們是如何進行所謂的“分支”和“基線”管理的?答案顯然是“拷貝”—我們通過“拷貝”或“備份”來建立基線;同樣,為支持多個開發(fā)人員可以同時進行開發(fā),我們?yōu)槊總€開發(fā)人員創(chuàng)建一份“拷貝”。由此看來,SVN通過“拷貝”來建立分支和基線顯得非常自然,有點“返樸歸真”的意思。
由于SVN功能的全局版本號特性,SVN中分支或基線的創(chuàng)建過程,或SVN中的“拷貝”過程,真正的操作是在版本庫中創(chuàng)建一個到某一全局版本號的指針(pointer),不再需要針對眾多的單個文件依次執(zhí)行操作。因此,該操作的成本為一個很小的常數(shù),與項目大小,版本庫大小,文件數(shù)目的多少無關(guān);并且,分支或基線的建立不需要進行版本的冗余存儲,新建立的分支或基線基本不占用版本庫空間,分支的后續(xù)存儲空間的開銷也只與修改的大小有關(guān)。
九、集成ApacheWebServer,提供更多的特性
SVN通過與ApacheWebServer的集成,可以提供基于http/https協(xié)議的版本庫訪問機制,從而支持SVN跨越防火墻的安全訪問。除此以外,SVN還可以利用更多的Apache特性,包括但不限于:Apache豐富的用戶認(rèn)證機制(包括通過LDAP服務(wù)器如WindowsActiveDirectory服務(wù)器的用戶認(rèn)證),基于目錄路徑的精細(xì)粒度的訪問控制,對傳輸?shù)木W(wǎng)絡(luò)流量進行壓縮/解壓縮,瀏覽版本庫目錄結(jié)構(gòu)等等。
十、支持WebDAV
WebDAV(Web-basedDistributedAuthoringandVersioning)是一種基于HTTP1.1協(xié)議的通信協(xié)議.它擴展了HTTP1.1,在GET、POST、HEAD等幾個HTTP標(biāo)準(zhǔn)方法以外添加了一些新的方法,使應(yīng)用程序可直接對WebServer直接讀寫,并支持寫文件鎖定(Locking)及解鎖(Unlock),還可以支持文件的版本控制。
Microsoftwindows2000/XP及IE,Office還有Adobe/MicroMedia的DW等都支持WebDAV,這又大大增強了Web應(yīng)用的價值,以及效能。對于需要大量發(fā)布內(nèi)容的用戶而言,應(yīng)用WebDAV可以降低對CMS系統(tǒng)的依賴,而且能夠更自由的進行創(chuàng)作。上傳、下載變得輕松自如。
SVN通過與ApacheWebServer的集成,支持WebDAV協(xié)議,使得業(yè)務(wù)用戶(businessusers)或非技術(shù)用戶在不安裝任何版本管理客戶端的情況下輕松訪問SVN版本庫,不改變業(yè)務(wù)用戶已有使用習(xí)慣,支持分布的業(yè)務(wù)用戶對文檔的評審、修改并實現(xiàn)版本控制,真正將軟件開發(fā)的生命周期從開發(fā)/技術(shù)團隊擴展到項目的全部干系人(stakeholder),避免通過電子郵件傳遞文檔的混亂與無序、通過Windows操作系統(tǒng)共享造成的安全漏洞、病毒攻擊、歷史版本被覆蓋或丟失、審計困難等諸多典型問題。
十一、更好的沖突標(biāo)識與處理
CVS和SVN功能都支持通過分支與合并進行并行開發(fā),并可以自動檢測到合并時的沖突(conflicts),并在合并結(jié)果中以<<<<<<…>>>>>>標(biāo)識合并的沖突部分。
在CVS中,經(jīng)常會出現(xiàn)由于用戶的疏忽(如,沒有注意到?jīng)_突,或沒有完全處理好沖突)而將仍然帶有<<<<<<…>>>>>>沖突標(biāo)識符號的文件直接進行提交(commit),從而在版本庫中產(chǎn)生垃圾版本。
SVN有效解決了CVS的以上問題:SVN記錄并保持文件的沖突狀態(tài),只有當(dāng)用戶明確執(zhí)行svnresolved命令后,該沖突狀態(tài)標(biāo)識才被復(fù)位,該文件才能被提交,從而大大減少了將仍然帶有<<<<<<…>>>>>>沖突標(biāo)識符號的文件直接進行提交的可能性。
十二、更多的本地/離線操作
眾所周知,CVS客戶端的工作拷貝中包含了一個隱含目錄CVS,該目錄中記錄了客戶端需要的一些管理信息;與此類似,SVN的客戶端工作拷貝中也包含了一個隱含目錄.svn,該目錄中同樣記錄了客戶端需要的一些管理信息,如版本庫URL,當(dāng)前訪問版本號等。
與CVS不同的是,SVN的.svn目錄中還包含了工作拷貝中每一個文件的一個“只讀的、干凈的”副本。正是由于該副本的存在,使得SVN功能與CVS相比,可以執(zhí)行更多的本地/離線操作,即某些操作不需要訪問版本庫服務(wù)器,因此不需要存在從客戶端到服務(wù)器的網(wǎng)絡(luò)鏈接,當(dāng)然也不消耗任何網(wǎng)絡(luò)帶寬,這進一步增強了SVN對廣域網(wǎng)的友好支持。
SVN功能的以下命令可以進行離線操作:
svnstatus-顯示工作拷貝上的本地修改概況;
svndiff-顯示工作拷貝上的本地修改細(xì)節(jié),比較修改前后的內(nèi)容;
svnrevert-撤銷工作拷貝上的本地修改;
十三、對符號鏈接進行版本管理
在Unix文件系統(tǒng)中,符號鏈接(symboliclinks,包括硬鏈接和軟鏈接)是一種重要的文件系統(tǒng)元素。CVS不能對符號鏈接進行版本管理;SVN則可以對符號鏈接進行版本管理。
十四、元數(shù)據(jù)管理
與CVS相比,SVN增加了元數(shù)據(jù)(metadata)管理機制。即可以對版本庫中的文件或目錄附加任意的“屬性”(property),并記錄屬性的變化歷史,也就是對元數(shù)據(jù)進行版本管理。一個SVN屬性是一個“屬性名稱/屬性值”的二元組,如“BugNumber=100”就是一個屬性,可以將該屬性附加到版本N上,以說明版本N改正了編號為100的BUG。
SVN元數(shù)據(jù)的目的是提供附件的信息以滿足流程或過程自動化的需要,以增強SVN的管理能力和自動化程度。SVN自身就通過“屬性”來存儲一些特殊的信息。一個使用SVN元數(shù)據(jù)的例子:可以在一些批處理的腳本程序或SVN的鉤子程序(hooks)中創(chuàng)建、訪問、修改“屬性”元數(shù)據(jù)來滿足流程自動化的要求。SVN功能和CVS功能介紹完畢,請關(guān)注本節(jié)其他相關(guān)報道。
【編輯推薦】
- CVS和SVN功能大比拼
- 技術(shù)指導(dǎo):詳解RedHat系統(tǒng)下SVN服務(wù)器搭建過程
- 學(xué)習(xí)指導(dǎo) 如何搭建SVN服務(wù)器
- 專家在線指導(dǎo)如何搭建SVN服務(wù)
- 常用SVN目錄結(jié)構(gòu)使用的兩大方法詳解