幾款版本控制工具SVN、GIT、CVS及Mercurial的比較.docx_第1頁
幾款版本控制工具SVN、GIT、CVS及Mercurial的比較.docx_第2頁
幾款版本控制工具SVN、GIT、CVS及Mercurial的比較.docx_第3頁
幾款版本控制工具SVN、GIT、CVS及Mercurial的比較.docx_第4頁
幾款版本控制工具SVN、GIT、CVS及Mercurial的比較.docx_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

版本管理RCS,cvs,svn,git比較1,RCS(Revision Control System) 修訂控制系統(tǒng)特點(diǎn):1),簡單2),使用Lock機(jī)制防止多個(gè)開發(fā)人員對(duì)同一個(gè)文件同時(shí)進(jìn)行修改.2,CVS(Cocurrent Version System)并發(fā)版本系統(tǒng)建立在RCS基礎(chǔ)上,最流行的開放源代碼版本控制系統(tǒng)特點(diǎn):1),使用單一的主代碼樹,而不像RCS那樣依賴多個(gè)目錄.2),最大優(yōu)點(diǎn)在于多名開發(fā)人員可以同時(shí)對(duì)一個(gè)文件進(jìn)行修改.允許合并.這就并發(fā)開發(fā).3,SVN(SubVersion)1)目錄的版本控制CVS 只能對(duì)文件進(jìn)行版本控制,不能對(duì)目錄進(jìn)行版本控制.CVS 只能注意到,一個(gè)文件在一個(gè)位置被刪除了,而在一個(gè)新位置創(chuàng)建了另外一個(gè)文件。由于它不會(huì)連接兩個(gè)操作,因此也很容易使文件歷史軌跡丟失2) SVN可以原子性提交CVS 采用線性、串行的批量提交,即依次地,一個(gè)接一個(gè)地執(zhí)行提交,每成功提交一個(gè)文件,該文件的一個(gè)新的版本即被記錄到版本庫中,提交時(shí)用戶提供的日志信息被重復(fù)地存儲(chǔ)到每一個(gè)被修改的文件的版本歷史中。CVS 串行批量提交模式的弊端在于 當(dāng)任何原因造成批量操作的中斷時(shí)(典型原因包括:網(wǎng)絡(luò)中斷、客戶端死機(jī)等),版本庫往往處于一個(gè)不一致的狀態(tài):原本應(yīng)該全部入庫的文件只有一部分入庫, 很有可能版本庫中的最新版本不能順利編譯,更為嚴(yán)重的是,隨著其他的用戶執(zhí)行cvs update 操作,該不一致性將迅速在開發(fā)團(tuán)隊(duì)中擴(kuò)散,從而嚴(yán)重影響團(tuán)隊(duì)的開發(fā)效率,并存在質(zhì)量隱患。另外,假如該批量提交的中斷沒有被及時(shí)發(fā)現(xiàn),開發(fā)團(tuán)隊(duì)往往要花更 多的時(shí)間進(jìn)行軟件調(diào)試和排錯(cuò)。4,GitGit 是用于 Linux 內(nèi)核開發(fā)的版本控制工具。與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務(wù)器端軟件支持,使源代碼的發(fā)布和交流極其方便。 Git 的速度很快,這對(duì)于諸如 Linux kernel 這樣的大項(xiàng)目來說自然很重要。 Git 最為出色的是它的合并跟蹤(merge tracing)能力。git更加適合分布式開發(fā)項(xiàng)目。而svn(當(dāng)然全稱是subversion)則更適合于集中式大型開發(fā)項(xiàng)目。也有在git之上再使用一層svn的做法。表1 CVS,Git,Mercurial,Subversion比較特征CVSGitMercurialSubversion是否原子提交CVS: 沒有. CVS提交不是原子的Git: 是的. 提交都是原子的Mercurial: 是的Subversion: 提交都是原子的文件和目錄是否可以移動(dòng)或重命名CVS: 不是. 重命名不支持. 如果手動(dòng)進(jìn)行, 可能會(huì)損壞歷史記錄Git: 支持重命名, 這是很實(shí)用的目的. git甚至能檢測(cè)到重命名之后文件的改變. 盡管如此, 基于特殊的存儲(chǔ)結(jié)構(gòu), 重命名不會(huì)被顯示的記錄, git能夠推導(dǎo)出來(在實(shí)際使用中很容易做到)Mercurial: 是的, 重命名是支持的Subversion: 是的. 支持重命名在移動(dòng)或重命名之后智能合并CVS: 不能. 重命名都不支持, 就不必說智能了Git: 不支持. 細(xì)節(jié)在Git FAQ里: “Git有一個(gè)重命名的命令git mv, 但是這僅僅是為了便利. 效果和移掉某個(gè)文件, 增加另外一個(gè)文件沒有任何區(qū)別”Mercurial: 是的. 重命名之后智能合并是支持的. Mercurtial文檔說:“如果我修改一個(gè)文件,而你重新命名了這個(gè)文件, 然后我們合并我們的變更, 那么我所做的修改就會(huì)被更新到根據(jù)舊文件名字而產(chǎn)生的新文件里(這可能就是你所期望的最簡單的動(dòng)作, 但是不是所有版本控制系統(tǒng)都支持)Subversion: 不支持. “svn help me“中提到“注意: 這個(gè)子命令相當(dāng)于拷貝和刪除.“并且可能有個(gè)bug文件和目錄拷貝CVS: 不能. 拷貝不支持Git: 不能. 拷貝不支持Mercurtial: 是的. 支持拷貝Subversion: 是的. 并且拷貝非常容易(O(1). 包括產(chǎn)生分支遠(yuǎn)程存儲(chǔ)倉庫的備份CVS: 間接的. 可以使用John Polstra寫的CVSupGit: 是的. 是git的內(nèi)部特征Mercurial: 是的Subversion: 間接的. 可以使用Chia-liang Kao的SVN:Mirror插件(好像是臺(tái)灣人)或Shlomi Fish的SVN-Pusher工具是否傳遞變更到父?jìng)}庫CVS: 不會(huì)Git: 是的(Linux內(nèi)核開發(fā)過程經(jīng)常使用這個(gè)特征)Mercurtial: 是的Subversion: 是的, 使用要么是Chia-Ling Kao的SVN:Mirror腳本或者Shlomi Fish的svn-push工具倉庫權(quán)限CVS: 很有限. “pre-commit hook scripts“能夠被用來實(shí)現(xiàn)各種權(quán)限控制系統(tǒng)Git: 請(qǐng)看和Git一起附帶的contrib/hooks/update-paranoid. 看和svnperms類似的path_rules的代碼Mercutial: 是的. 它能夠鎖住倉庫, 子目錄或者使用hooks后的文件Subversion: 是的. 基于HTTP權(quán)限的WebDAV-based模塊能夠支持基于目錄級(jí)的倉庫變更集CVS: 不是. 變更是基于文件的Git: 是的. 是支持的, 創(chuàng)建他們很容易Mercurial: 是的. 變更集是支持的Subversion: 部分支持. 對(duì)于一次提交會(huì)隱式創(chuàng)建一個(gè)變更集跟蹤線性的文件歷史CVS: 是的. cvs annotateGit: 是的.(git blame)Mercurial: 是的(hg annotate)Subversion: 是的(svn blame)能夠只在倉庫的單目錄下作用CVS: 是的Git: 不是. 盡管如此, 提交多少能被限制, 請(qǐng)看“Repository Permissions”Mercurial: 能夠基于某樹的某個(gè)子集進(jìn)行提交. 也有局部檢出的能力Subversion: 是的跟蹤未提交的變化CVS: 是的. 通過cvs diffGit: 是的. 另外, 分支在git里非常智能, 在某些工作流里能夠被當(dāng)成是另外一個(gè)未提交代碼的存儲(chǔ)庫. 請(qǐng)看“git stash“命令Mercurial: 是的. 使用hg diffSubversion: 是的. 使用svn diff基于單個(gè)文件的提交信息CVS: 不是. 提交信息是基于單次變化的Git: 是的. 提交信息基于變更集Mercurial: 不是Subversion: 不是. 沒有這個(gè)特征文檔CVS: 非常棒. 有很多在線的tutorials和資源, 在線的書籍. 命令行客戶端也支持一個(gè)在線的幫助系統(tǒng)Git: 良好. 短的幫助比較簡潔難懂. man頁很有分量, 但容易誤解. 有很多tutorialMercurial: 很好. 有基于公司的書籍和wiki. 每個(gè)命令都集成了幫助Subversion: 很好. 有一些在線的書籍和一些在線的tutorials和資源. 并且書籍是以docbook/xml寫的所以很容易變換成其他格式. 命令行同樣提供了在線的幫助系統(tǒng)配置是否輕松CVS: 好. 是個(gè)事實(shí)上的標(biāo)準(zhǔn). 基于每個(gè)系統(tǒng)都有并且很容易配置Git: 好. 在現(xiàn)有平臺(tái)上二進(jìn)制可用. 需要C編譯器和Perl. 在windows上需要cygwin. 并有一些Unix特征Mercurial: 非常好. 幾乎所有平臺(tái)都有二進(jìn)制包. 從源碼編譯需要python2.3以上, 并且需要C編譯器Subversion: Subversion服務(wù)器需要安裝在apache2模塊里(如果有人希望HTTP作為底層協(xié)議的話)或使用它自身的服務(wù)器. 客戶端需要Subversion特征的邏輯還有WebDAV庫(針對(duì)HTTP). 安裝組件很直接, 但是需要一些額外的工作(假定subversion在某些平臺(tái)沒有二進(jìn)制包可用)命令集CVS: 包含了3個(gè)經(jīng)常用到的命令的簡單的命令集(cvs commit, cvs update和cvs checkout)和其它一些Git: 命令集很豐富, 并且和CVS不兼容Mercurial: 嘗試模仿CVS交互方式, 但是偏離了基于不同的設(shè)計(jì)的意圖Subversion: 類CVS的命令集, 能夠很容易被CVS用戶使用網(wǎng)絡(luò)支持CVS: 好. cvs在不同的場(chǎng)合使用不同的協(xié)議. 協(xié)議能夠通過ssh鏈接的加密隧道進(jìn)行Git: 非常棒. 能夠使用本地的git協(xié)議, 但也能在rsync, ssh, HTTP和HTTPS上使用Mercurial: 非常棒. 使用HTTP或ssh. 遠(yuǎn)程訪問會(huì)非常安全, 在只讀網(wǎng)絡(luò)里不需要上鎖Subversion: 非常好. Subversion服務(wù)器支持WebDAV+DeltaV(基于HTTP或HTTPS)作為底層協(xié)議, 或者它自身的協(xié)議同樣能在ssh鏈接通道里使用.可移植性CVS: 好. 客戶端能在UNIX, Windows和Mac OS上使用. 服務(wù)器端能在UNIX, 附有UNIX模擬層的Windows上使用Git: 客戶端運(yùn)行在大多數(shù)的UNIX系統(tǒng)上, 但沒有MS-Windows本地程序. 基于cygwin的系統(tǒng)看起來也能使用Mercurial: 非常棒. 運(yùn)行在基于所有能運(yùn)行python的平臺(tái).倉庫是兼容性的基于CPU結(jié)構(gòu)和字節(jié)序的Subversion: 非常好. 客戶端和服務(wù)器端都能在UNIX, Windows和Mac OS X上運(yùn)行web接口CVS: 是的.CVSweb, ViewVC, Chora和wwCVSGit: 是的. Gitweb包含在發(fā)布包中Mercurial: 是的. Web接口是內(nèi)置組件Subversion: 是的. ViewVC,SVN:Web, WebSVN, ViewSVN, mod_svn_view, Chora, Trac,SVN:RaWeb:Light,SVNBrowser, Insurrection和perl_svn.另外, Subversion的apache服務(wù)也提供了一個(gè)基礎(chǔ)的web接口圖形用戶界面CVS: 非常好. 有很多圖形界面可以用: WinCVS, Cervisia(對(duì)于KDE), TortoiseCVS(Windows瀏覽器

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論