您的位置:軟件測試 > 開源軟件測試 > 開源配置管理工具 > cvs
CVS由來與發(fā)展
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2013/2/22 13:20:40 ] 推薦標(biāo)簽:

軟件的開發(fā)和維護(hù)過程,離不開版本管理。對于一份文件,我們經(jīng)常需要按不同的版本進(jìn)行歸檔,或者從資料庫里找出反映文件修改歷史的不同版本。這樣一方面可以使各個階段的代碼和文檔變得井然有序,另一方面可以在當(dāng)前版本出現(xiàn)問題的時候,找回先前的版本。當(dāng)然,人們希望的還不止這些,例如,人們希望規(guī)定誰在什么時候可以如何存取某個版本的內(nèi)容,也希望差異不大的版本按增量的方式存成一個文件,以節(jié)省存儲空間……毫無疑問,我們需要一種對文件版本進(jìn)行控制管理的工具,以有效地控制產(chǎn)品的質(zhì)量,提高項(xiàng)目開發(fā)管理水平。

    CVS(Concurrent VersionsSystem)是一個能讓很多程序開發(fā)者同時進(jìn)行軟件開發(fā)的、強(qiáng)大的版本管理控制工具。CVS并不是Internet的產(chǎn)物,而它的出現(xiàn)卻是歷史的必然。Richard Stallman倡導(dǎo)的開源軟件運(yùn)動大大加速了這一過程。

起因

    開源軟件的一個重要特點(diǎn)是可以從世界任何地方獲得代碼和改進(jìn)代碼,這是傳統(tǒng)軟件開發(fā)所不具備的。這意味著開源軟件的開發(fā)在全球開發(fā)者的協(xié)作下成為一個不間斷的過程,每個人都可能成為開發(fā)隊(duì)伍的一員,并且每個人都會隨時流動。一個地域上分散的志愿者組織顯然不能投入很多的時間來訓(xùn)練其成員彼此合作,這需要一套項(xiàng)目管理辦法,確保新成員能較容易地適應(yīng)工作;同時有一個自動的機(jī)制接收外來代碼,使每個成員能及時得到新修改的代碼。當(dāng)然,這不僅僅是開源社區(qū)的需要,只是開源社區(qū)的人員分散、資源不易管理,更需要一個版本管理工具。這樣的一個工具首先應(yīng)該支持世界范圍的協(xié)作,保持發(fā)布版本的一致性;其次它能夠容易地匯集各個特定版本的Bug,并在全球范圍同步一致地進(jìn)行修改;再者它需要使任何一個開發(fā)者能夠追蹤軟件的變化;而在開發(fā)者為軟件增加新功能的同時,不能妨礙一般用戶使用一個相對穩(wěn)定的版本。

    CVS很好地解決了這一問題。除了開發(fā)人員可以使用CVS很容易地把代碼變化存入代碼庫之外,它還為不同角色的人員設(shè)置了不同的訪問權(quán)限。例如,不需要修改代碼的人員可以以匿名只讀方式訪問代碼庫。而需要修改代碼的開發(fā)人員每個人都能在自己的機(jī)器上建立一個開發(fā)樹,當(dāng)需要在一個特殊的代碼區(qū)工作時,首先通過簡單的命令,使開發(fā)樹獲得更新,以保持全球范圍開發(fā)狀態(tài)的同步一致。這樣可以避免出現(xiàn)這樣的問題:花了半天時間修改的Bug,在提交的時候發(fā)現(xiàn)別人已經(jīng)解決了。一旦確認(rèn)代碼中的Bug別人還沒解決,開發(fā)者可以馬上開始工作。當(dāng)這些問題解決后,CVS會自動產(chǎn)生補(bǔ)丁,并將補(bǔ)丁發(fā)送給維護(hù)人員進(jìn)行檢查,后可能將其并入主項(xiàng)目樹中去。

    發(fā)展歷程

    早在CVS之前,出現(xiàn)過對變化前后的文件進(jìn)行比較,并根據(jù)異同形成“補(bǔ)丁”(Patch)的工具。例如,Unix上使用的Diff和LanyWall寫的Patch,這兩個工具對程序代碼的傳播和維護(hù)起到了重要作用。但是,后來出現(xiàn)的許多要求Diff和Pach都顯得無能為力,例如,發(fā)現(xiàn)修補(bǔ)出錯而需要退回到以前未修改的狀態(tài)等。這要求有一個保存項(xiàng)目歷史紀(jì)錄的系統(tǒng)。

    當(dāng)時初步具備這個功能的工具是SCCS(Source Code Control System),是貝爾實(shí)驗(yàn)室的MarcRochkind在1972年寫成的。SCCS是一種基本的源文件版本控制工具,適用于正文文件的版本維護(hù)。它基于單一文件的版本控制,代碼庫和要維護(hù)的文件通常在同一目錄下。SCCS有一個專門的SCCS文件保留源文件的各編碼版本,其中記錄了足夠的信息來恢復(fù)一個版本,并記錄了誰對文件有修改權(quán)、有版本鎖的功能。SCCS是AT&T Unix發(fā)行版的一部分。

    然而,自由軟件項(xiàng)目終選擇了Walter F.Tichy的版本控制系統(tǒng)(RCS)來滿足他們的需要。RCS在SCCS基礎(chǔ)上加以改進(jìn),界面也更加友好,是BSDUnix發(fā)行版的一部分。它可以追蹤文件的改變,在工作組中對文件的共享和訪問進(jìn)行控制,通常用于維護(hù)源代碼;也能追蹤文件的修改歷史。RCS包含一套命令,用于設(shè)置RCS源碼庫中的文件屬性、檢入檢出文件、清除文件、比較修訂版本,以及合并文件等。由RCS管理的文件可以既可以是純文本文件,也可以是二進(jìn)制文件。

    然而,RCS仍存在幾個重要缺陷,其中主要的是由于使用單一目錄控制與檔案鎖,無法讓多個編程人員同時開發(fā)。因?yàn)镽CS本身不是針對網(wǎng)絡(luò)環(huán)境寫的,開發(fā)者只能在RCS代碼庫所在的機(jī)器上工作,難以在分布式環(huán)境下開發(fā)。這些缺點(diǎn)后來在CVS中都得到了改進(jìn)。1956年DickGrune寫了一段Shell腳本來簡化RCS的使用。1986年10月,它的第6個發(fā)行版被放到USENET新聞組comp.soures.unix之中。1989年3月,Brian Berlinor用C語言重新設(shè)計(jì)并編寫了CVS的代碼。后來,JettPolk幫助Brian完成了CVS模型設(shè)計(jì),增加了一些關(guān)鍵特性。1993年前后,JimKingdon終將CVS設(shè)計(jì)成基于網(wǎng)絡(luò)的平臺,開發(fā)者們能從Internet任何地方獲得程序源代碼。

    特點(diǎn)

    CVS本身是開源項(xiàng)目,通過其方便的功能使眾多的人們加入到開源軟件項(xiàng)目之中,促進(jìn)了開源運(yùn)動的發(fā)展。反過來,開源項(xiàng)目的成功又促使版本管理工具不斷完善。現(xiàn)在大多數(shù)開源軟件項(xiàng)目都使用CVS做為版本控制和協(xié)作開發(fā)的工具,其中不乏像GNOME、KDE、Apache這樣的龐大的項(xiàng)目,充分顯示了CVS做為版本控制工具的成功。

    歸結(jié)起來,CVS為開源項(xiàng)目做出的貢獻(xiàn)大致有兩點(diǎn):一是由于它通過眾人的參與使開源軟件質(zhì)量不斷提高;二是它方便了全球軟件工作者的協(xié)作,使軟件成為全人類智慧的結(jié)晶。這大概是CVS在自由軟件世界中處于主導(dǎo)地位的原因了。

    盡管CVS的功能和使用方法看起來頗為龐大復(fù)雜,其實(shí)CVS重要的只有兩點(diǎn),即記錄保存和協(xié)作。人們有時要將一個程序的當(dāng)前狀態(tài)與先前某一狀態(tài)做比較。例如,在為程序添加新功能的過程中,有人可能會通報(bào)試用版的Bug。為了找到問題之所在,一方面程序必須可以找回原來某時的可用狀態(tài)。事實(shí)上,開發(fā)者可以簡單地說一句,把以前程序的狀態(tài)給我,或者說把新公開發(fā)行的版本給我,這是CVS對歷史記錄的保存作用。另一方面,CVS系統(tǒng)要順利工作,開發(fā)者必須彼此知道在某個時刻準(zhǔn)備做什么工作。CVS能夠在代碼提交的時候提醒開發(fā)者代碼是否存在沖突;當(dāng)某人因?yàn)闄?quán)限問題不能工作的時候,彼此能很快地溝通。這是CVS協(xié)同工作、跟蹤沖突的能力。CVS的一般任務(wù)主要是訪問已有的代碼庫、創(chuàng)建新項(xiàng)目、檢出工作拷貝、進(jìn)行更改、檢測并解決沖突、瀏覽記錄信息、檢查并還原更改等。

    CVS現(xiàn)已成為廣泛使用的版本管理系統(tǒng),普遍應(yīng)用在軟件開發(fā)過程中,是基本的軟件工程配置管理工具之一。不論是一個龐大的工程,如GNOME、Apache,還是個人開發(fā)一個小軟件,都可以方便地使用CVS來管理開發(fā)過程,提高效率,方便管理。

    創(chuàng)始者

    CVS的開發(fā)隊(duì)伍共有18個人,其管理者都是對CVS的發(fā)展有過突出貢獻(xiàn)的。CVS由開發(fā)者們共同決定如何發(fā)展,要做什么關(guān)鍵的改進(jìn)。但是這個過程并不完全民主。僅在吸收新的開發(fā)成員時,須有多數(shù)人同意才行。其它方面大多不必如此,更不用投票。

    CVS主要開發(fā)者JimKingdon認(rèn)為,在自由軟件項(xiàng)目中過分民主會陷入無休止投票的泥潭,導(dǎo)致效率低下。而指定單一人員來維護(hù),對于自由軟件的開發(fā)來說是通行、成功的做法,當(dāng)然也是倍受爭議的。對于軟件的每一處修改,需要這個維護(hù)人員的同意,也只能通過這個單一的維護(hù)人員授權(quán)給其它下層維護(hù)人員。誠然,開源軟件的成功要依靠眾人的參與,但是,愿意為軟件效力的每個人并不都具備編碼的水準(zhǔn),都了解局部改變和整體的關(guān)系,因此不能誰說了都算,而是要把目光集中在真正有可能給軟件帶來貢獻(xiàn)的那些人身上。

    CVS走過了一段坎坷的路程。Jim Kongdon既是一個了不起的程序員,又具有商人的特質(zhì)。JimKingdon畢業(yè)于美國俄亥俄州的Oberlin學(xué)院,之后曾為自由軟件基金會(FSF)工作過。1993年之后,除了開發(fā)CVS之外,他還是Cygnus的工程師,為GDB修補(bǔ)Bug。他自己開過一個Cyclic公司。Cyclic是靠提供CVS支持服務(wù)來賺錢的公司。JimKingdon 1995年白手起家,到了1998年經(jīng)營收入已達(dá)到了13.5萬美元。離開Cyclic之后,Jim Kingdon在RedHat工作了一年,后來頻繁“跳槽”。2002年之后,他在加利福尼亞Fremont的Enlighta公司當(dāng)程序員,為Web/SQL做測試。他的自我發(fā)展目標(biāo)是甘愿當(dāng)一個程序員,與同事、客戶、合作伙伴一道創(chuàng)造和維護(hù)高質(zhì)量的軟件。他本人興趣甚廣,除了編程,他還熱衷太空市場,學(xué)習(xí)西班牙語、日語和世界語等。

    長期以來,Cyclic維護(hù)著CVS的“官方”網(wǎng)站http://www.cvshome.org/。但是,除少數(shù)人員的重合外,Cyclic和CVS的開發(fā)隊(duì)伍基本上是獨(dú)立的。1999年,Jim Kingdon突然宣布他要離開Cyclic去RedHat工作,他將Cyclic賣給了Source Gear公司,同時Cyclic也發(fā)布了一個聲明,說它不再正式支持CVS。這帶來一場不小的震動。

    SourceGear也是一家銷售和維護(hù)軟件的公司,它希望能夠作為CVS的供應(yīng)商,使CVS變得有利可圖,終成為CVS發(fā)展的領(lǐng)頭羊。盡管實(shí)際情況不盡人愿,一些CVS的開發(fā)者并不買他們的賬,但Source Gear還是為CVS做了一些實(shí)質(zhì)性的工作。而CVS的開發(fā)者迅速成立了一個新的項(xiàng)目CVSContinuity Project,其目的是使CVS開發(fā)、維護(hù)工作能夠繼續(xù)正常進(jìn)展下去,F(xiàn)在CVS的網(wǎng)站掛在YankeeGroup麾下CollabNet公司的SourceCase網(wǎng)站上,SourceCase是專門為全球志愿的開發(fā)人員協(xié)同開發(fā)軟件提供的Web空間。

    除了Jim Kingdon以外,CVS開發(fā)隊(duì)伍中的一些關(guān)鍵人物是:
    ◆Steve Willer為CVS社團(tuán)做了大量的服務(wù)工作,在郵件組中回答各種問題,并向開發(fā)團(tuán)隊(duì)報(bào)告具有共性的Bug。
    ◆Pascal Molli負(fù)責(zé)網(wǎng)站http://www.loria.fr/~molli/cvs-index.html的維護(hù)。這個網(wǎng)站上面放著新版本的CVS和各種CVS文檔,以及與相關(guān)資源的鏈接等。
    ◆David Klann維護(hù)著info-cvs MINI-FAQ(常見問題解答),并定期更新。這個FAQ鏈接著各個相關(guān)的地址,提供各種公眾需要的信息。
    ◆David W. Eaton維護(hù)著comp.software.config-mgmt FAQ。這是一項(xiàng)艱巨的工作,因?yàn)樗噲D把整個配置管理領(lǐng)域都囊括進(jìn)去,而不僅僅是CVS。

    版本與相關(guān)項(xiàng)目

    目前,新的CVS版本是2004年3月13日發(fā)布的1.12.6,穩(wěn)定版本是2004年3月11日發(fā)布的1.11.14。CVS支持的平臺包括Windows 32、Linux和Unix等。

    CVS有多個發(fā)展方向,相關(guān)的開發(fā)項(xiàng)目主要有:
    ◆Anonymous CVS Access Via ssh 加強(qiáng)CVS的安全。
    ◆Bonsai 為CVS增加基于web的圖形界面。
    ◆CHalogen The Change Log Generator,產(chǎn)生HTML形式的變化日志。
    ◆Component Software CVS for Windows Windows平臺下的CVS前端。
    ◆CVS Access Control List Extension 為CVS遠(yuǎn)程代碼庫增加ACL訪問控制。
    ◆CVS Code Historian 在MS VisualStudio或?yàn)g覽器中,利用CVS記載的信息進(jìn)行文件比較或分析。
    ◆CVS for MVS 把CVS移植到MVS/OS390/USS主機(jī)。
    ◆CVS Monitor CVS代碼庫瀏覽器。
    ◆CVS version control for web development 為Web開發(fā)者寫的CVS工具。
    ◆CVS via FTP 通過FTP實(shí)現(xiàn)CVS網(wǎng)站鏡像。
    ◆cvs2cl CVS日志轉(zhuǎn)換。
    ◆cvsdude 在Windows和類Unix客戶端平臺上用命令行訪問CVS。
    ◆CVSGrab 通過防火墻獲得CVS樹。
    ◆cvs2html 將CVS日志轉(zhuǎn)成HTML格式。
    ◆cvsknit A CVS automation suite,粘合多個CVS代碼庫的自動工具。
    ◆cvslock 維護(hù)和檢視多個代碼庫,保持同步。
    ◆CVSNT 在Windows NT/2000下運(yùn)行的CVS服務(wù)器。
    ◆Cvsplot 為CVS控制的文件提供統(tǒng)計(jì)信息。
    ◆CVSSearch 通過CVS命令來檢索代碼片斷的工具。
    ◆CVSspam Notification of CVS committs, by email。當(dāng)CVS有變化提交時發(fā)出E-mail。
    ◆CVSSupport 用Perl寫的CVS工具。
    ◆CVSToys CVS變化提交時的通知工具。
    ◆CVSTrac 基于Web的Bug和補(bǔ)丁跟蹤系統(tǒng)。
    ◆CVSup 通過網(wǎng)絡(luò)發(fā)布和更新批量文件的軟件包。
    ◆CVSweb for Windows 95/NT/2000 為在Windows PWS/IIS上運(yùn)行CVS Web提供的指令。
    ◆CVSweb (Henner Zeller version) 用Perl腳本通過RCS命令為CVS加上Web接口。
    ◆StatCvs 產(chǎn)生HTML和PNG格式的CVS代碼庫的統(tǒng)計(jì)信息。
    ◆ViewCVS 用Python寫的類似CVS Web工具。
    ◆ViewCVS for Windows ViewCVS到Windows平臺的移植,運(yùn)行于IIS。

    CVS是一個廣泛使用的版本控制系統(tǒng),隨著互聯(lián)網(wǎng)的普及,分布在世界各地的程序員會越來越多地采用它進(jìn)行版本控制和開發(fā)。

軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd