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

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

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

起因

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

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

    發(fā)展歷程

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

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

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

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

    特點

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

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

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

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

    創(chuàng)始者

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

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

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

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

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

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

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

    目前,新的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ā)項目主要有:
    ◆Anonymous CVS Access Via ssh 加強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遠程代碼庫增加ACL訪問控制。
    ◆CVS Code Historian 在MS VisualStudio或瀏覽器中,利用CVS記載的信息進行文件比較或分析。
    ◆CVS for MVS 把CVS移植到MVS/OS390/USS主機。
    ◆CVS Monitor CVS代碼庫瀏覽器。
    ◆CVS version control for web development 為Web開發(fā)者寫的CVS工具。
    ◆CVS via FTP 通過FTP實現(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 維護和檢視多個代碼庫,保持同步。
    ◆CVSNT 在Windows NT/2000下運行的CVS服務器。
    ◆Cvsplot 為CVS控制的文件提供統(tǒng)計信息。
    ◆CVSSearch 通過CVS命令來檢索代碼片斷的工具。
    ◆CVSspam Notification of CVS committs, by email。當CVS有變化提交時發(fā)出E-mail。
    ◆CVSSupport 用Perl寫的CVS工具。
    ◆CVSToys CVS變化提交時的通知工具。
    ◆CVSTrac 基于Web的Bug和補丁跟蹤系統(tǒng)。
    ◆CVSup 通過網(wǎng)絡(luò)發(fā)布和更新批量文件的軟件包。
    ◆CVSweb for Windows 95/NT/2000 為在Windows PWS/IIS上運行CVS Web提供的指令。
    ◆CVSweb (Henner Zeller version) 用Perl腳本通過RCS命令為CVS加上Web接口。
    ◆StatCvs 產(chǎn)生HTML和PNG格式的CVS代碼庫的統(tǒng)計信息。
    ◆ViewCVS 用Python寫的類似CVS Web工具。
    ◆ViewCVS for Windows ViewCVS到Windows平臺的移植,運行于IIS。

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

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