1 引言?
??? 當(dāng)前的信息系統(tǒng)開發(fā)過程存在著以下兩個急需解決的問題,。第一,開發(fā)過程中代碼的持續(xù)集成問題,。過去的系統(tǒng)集成,,開發(fā)人員必須跑遍整個開發(fā)中心,詢問每一個程序員有沒有新的代碼,,然后把這些新代碼拷貝過來,,再找到合適的插入位置,這樣集成方式效率低下,,錯誤率極高,。第二,版本控制問題,。由團(tuán)隊進(jìn)行開發(fā)的項目,,尤其是開源的項目,版本的控制是復(fù)雜的,。開發(fā)人員對于版本定義的不一致,,以及先前版本的內(nèi)容不完整甚至是丟失都是危險的。對于上述問題最簡單的解決方案就是:使用一套具有網(wǎng)絡(luò)功能并且?guī)в凶岄_發(fā)者輕松獲取源代碼的配置管理系統(tǒng)作為所有代碼的來源,,然后再使用一套版本管理工具,,以做到安全正確地記錄和使用各個時期各個版本中的文件。?
??? CVS是一套出色的開放源代碼的集配置管理與版本控制一體的工具,,管理所有的源文件以及軟件的版本信息,。這里的源文件不僅僅是代碼源文件,,還包括創(chuàng)建的腳本文件、屬性文件,、庫文件等,。?
??? 正確地在系統(tǒng)開發(fā)過程中,尤其是在企業(yè)級開發(fā)或開源開發(fā)過程中使用CVS控制工具,,體現(xiàn)了軟件配置管理與版本控制相結(jié)合的思想,,這也是開發(fā)人員和團(tuán)隊所必須具備的技能。?
2 CVS的概念?
??? CVS(Concurrent Versions System)是目前業(yè)界使用比較廣泛,,思想比較先進(jìn),,控制比較簡單的配置管理與版本控制一體的工具。CVS是基于Unix體系中成熟的SCCS(Source Code Control System)和RCS(Revision Control System)開發(fā)而成的一個開放源碼的項目,,已經(jīng)支持在Windows操作系統(tǒng)上的應(yīng)用,。由于開放源碼項目的開發(fā)者分布很廣泛,對于源文件和版本信息的管理難度很大,,需要一個結(jié)構(gòu)簡單,、功能強大,、能夠跨平臺的工具進(jìn)行控制,,所以開放源碼項目配置管理與版本控制已經(jīng)成為目前CVS的一個典型應(yīng)用。
2.1 CVS的結(jié)構(gòu)?
??? CVS的基本工作思路就是在一臺服務(wù)器上建立一個倉庫,,倉庫里可以存放許多不同項目的源程序,,由倉庫管理員統(tǒng)一管理這些源程序。這樣就好象只有一個人在修改文件一樣避免了沖突,。每個用戶在使用倉庫之前,,首先要把倉庫里的項目文件下載到本地。用戶做的任何修改都是在本地進(jìn)行的,,然后用CVS 命令進(jìn)行提交,,再由 CVS 倉庫管理員統(tǒng)一修改。這樣就可以做到跟蹤文件的變化,,控制代碼的沖突,。基于以上的工作思路CVS采用客戶機(jī)/服務(wù)器的結(jié)構(gòu),,軟件的源文件以及各種版本信息存儲在作為倉庫的中心服務(wù)器內(nèi),,開發(fā)者可以隨時通過CVS的客戶端工具將本地源文件的副本與中心服務(wù)器倉庫中的源文件保持一致。CVS的結(jié)構(gòu)如圖一所示,。?
圖一:CVS結(jié)構(gòu)圖
2.2 CVS的重要術(shù)語?
2.2.1 Module(模塊):相互關(guān)聯(lián)的一組文件的集合,,一般一個Module會和一個工程相對應(yīng)。2.2.2 Respository(倉庫):存放Module的倉庫,,可以在開發(fā)人員的本地也可以在遠(yuǎn)程CVS服務(wù)器上,。
2.2.3 Branch(分枝):Branch是倉庫中獨立派生的一個分離的開發(fā)版本,,用于管理源文件的修改。其中HEAD作為一個特殊的Branch代表主干版本,。HEAD可以分離出不同的Branch,,而每個Branch中的變更又可以很容易地與HEAD進(jìn)行合并。這種Branch模型通過支持源文件的并發(fā)修改,,保證了不同開發(fā)者的相對獨立,,但又高度集成。
2.2.4 Merge(合并):在CVS版本控制過程中,,Merge作為一個核心的工作,,將派生的Branch版本與HEAD的最新版本之間的變更合并到開發(fā)人員的工作目錄之中。CVS提供的Merge命令使開發(fā)人員在使用源文件時不會鎖定該文件,,即同一個CVS管理的源文件可以被多個開發(fā)人員同時進(jìn)行修改,。
圖二:Java開發(fā)過程中CVS控制的示意圖
2.3 CVS的工作流程?
??? CVS的工作流程包括以下三個步驟。
??? 第一,,預(yù)處理,。通過更新操作保證所有本地源文件與最新的Branch中的源文件一致性。
??? 第二,,代碼開發(fā),。在本地進(jìn)行軟件代碼的開發(fā),并在本地保存代碼的修改,。
??? 第三,,同步。當(dāng)做好提交工作的準(zhǔn)備后,,進(jìn)行與服務(wù)器的同步操作,。Incoming和Outgoing是CVS工作時的兩種狀態(tài)模式,在進(jìn)行Update操作時(從服務(wù)器得到其他人的修改),,CVS進(jìn)入Incoming狀態(tài),;在進(jìn)行Commit操作時(把本地修改提交給CVS服務(wù)器),CVS進(jìn)入Outgoing狀態(tài),。在同步階段中,,開發(fā)人員首先通過Update操作檢查本地修改是否會造成與服務(wù)器端源文件的沖突和對完整性的破壞,最后向服務(wù)器Commit本地的修改,。CVS版本控制的基本流程如圖三所示:
3 Java程序開發(fā)過程中的CVS控制?
??? Java語言具有語法簡單,、安全、支持多線程,、具有跨平臺性以及純面向?qū)ο蟮忍攸c,。為了廣泛適應(yīng)各種類型的應(yīng)用模式,先后出現(xiàn)了J2SE,、J2ME以及J2EE等組件技術(shù),。
??? 現(xiàn)在CVS版本控制器對于Java提供了無縫的支持,。眾多Java開發(fā)工具都將CVS功能內(nèi)嵌到自身中,作為其版本控制的基本依托,。主要支持CVS的開發(fā)工具有Borland公司的JBuilder和Eclipse組織提供的開源工具Eclipse,。其中,JBuilder代表了當(dāng)前主流的商用Java開發(fā)工具,,Eclipse則代表了典型的開源Java開發(fā)工具,。二者在最新的版本中都已經(jīng)利用自身嵌入的CVS控制器實現(xiàn)了在本地或遠(yuǎn)程CVS服務(wù)器上的軟件版本控制,從而將先進(jìn)的版本控制思想引入到Java世界中,。此外,,對于其它尚未嵌入CVS的Java開發(fā)工具,開發(fā)人員還可以下載得到獨立的CVS管理器,。比較常用的CVS管理器有WinCVS,。三種不同的CVS管理器各有特點,下面分別介紹,。
3.1 JBuilder中的CVS控制?
??? JBuilder是Borland公司的Java程序開發(fā)的主要工具,,更是J2EE組件技術(shù)開發(fā)中的重要商業(yè)工具。JBuilder的標(biāo)準(zhǔn)版和企業(yè)版中集成了CVS版本控制系統(tǒng)功能,,在JBuilder的應(yīng)用瀏覽器中使用CVS的接口可以方便地訪問到CVS提供的大部分命令,,從而直接訪問、使用和控制本地或遠(yuǎn)程的CVS系統(tǒng),。
??? JBuilder中使用CVS的主要過程如下:第一,,創(chuàng)建CVS倉庫(Respository),。該倉庫可以位于本地或遠(yuǎn)程服務(wù)器,;第二,創(chuàng)建CVS 模塊(Module),。開發(fā)人員在指定的倉庫中創(chuàng)建模塊,,一旦工程以模塊的形成存在,那么工程的內(nèi)容就都在CVS的控制之下了,;第三,,將JBuilder開發(fā)的源文件添加到CVS倉庫中;第四,,從CVS倉庫中檢出(check out)模塊內(nèi)容存放到本地工程中,;第五,在檢出的本地工程中修改或刪除源文件,;第六,,解決與服務(wù)器倉庫中的代碼沖突,最終將本地源文件的更新內(nèi)容提交到CVS倉庫中,。
3.2 Eclipse中的CVS?
??? Eclipse是開源組織的Java開發(fā)工具,,可以方便高效地開發(fā)J2SE和J2EE等組件技術(shù)下的信息系統(tǒng)或插件,。Eclipse本身內(nèi)置了CVS命令,不需要使用其他客戶端軟件,,可以直接訪問,、使用和控制CVS的服務(wù)器。
??? 作為開源項目主要使用的開發(fā)工具, Eclipse與以JBuilder為代表的商業(yè)開發(fā)工具在CVS使用上模式上有很大差別,,即Eclipse沒有在本地創(chuàng)建CVS服務(wù)進(jìn)行控制管理的功能,。其原因在于使用Eclipse開發(fā)的開源項目,項目中的源文件需要高度地集中管理,。開發(fā)者需要將本地的源文件提交到遠(yuǎn)程服務(wù)器上,,由開源組織統(tǒng)一進(jìn)行控制。而JBuilder作為商用工具考慮到應(yīng)用開發(fā)者面對的信息系統(tǒng)的類型很廣泛,,對于開發(fā)規(guī)模較小的應(yīng)用,,源文件的控制不需要放置在CVS的遠(yuǎn)程服務(wù)器上,可以通過在本地創(chuàng)建CVS服務(wù)的方式進(jìn)行獨立控制,。
3.3 通過WinCVS控制Java程序?
??? WinCVS是Windows操作系統(tǒng)下的一種CVS客戶端控制軟件,,是目前對于CVS控制最為完善與靈活的軟件,其使用方法相對比較復(fù)雜,。WinCVS獨立于任何開發(fā)工具,,因此可以控制多種開發(fā)語言的源文件(如:Java、C/C++,、Pascal),。例如,對于使用其他Java開發(fā)工具(如:Jdesigner,、TextPad等等)甚至是寫字板開發(fā)的Java程序源文件,,WinCVS都能夠進(jìn)行控制管理。
??? 使用WinCVS的過程如下:第一,,配置客戶端與服務(wù)器的參數(shù),;第二,CVS管理人員將源文件導(dǎo)入到服務(wù)器的模塊中,;第三,,CVS管理人員創(chuàng)建標(biāo)簽、分支,;第四,,開發(fā)人員登錄遠(yuǎn)程CVS服務(wù)器;第五,,開發(fā)人員從服務(wù)器倉庫中檢出(checkout)模塊到本地工程(如圖四所示),;第六,開發(fā)人員將本地工程修改過的文件提交到服務(wù)器的倉庫中;第七,,開發(fā)人員在每次對本地的文件修改前,,將服務(wù)器端倉庫中存放的文件更新到本地工程中,以保證在多人操作同一個文件時不會引起沖突,;第八,,開發(fā)人員將本地工程中的修改結(jié)果提交到服務(wù)器倉庫中;第九,,CVS的管理人員合并不同分支(版本)的文件,。在整個過程中,管理人員和開發(fā)人員可以隨時察看查看文件的當(dāng)前狀態(tài)和歷史信息,。
????????????
圖四:Checkout操作
4 結(jié)束語?
??? 利用CVS工具結(jié)合配置管理和版本控制的先進(jìn)思想管理Java程序開發(fā)全過程,,其目的是建立一整套高效安全的Java軟件項目開發(fā)的控制流程,以到達(dá)軟件工程中對于軟件開發(fā)實現(xiàn)過程的要求,。
??? CVS工具的作用是提供快捷的方法和清晰的控制流程給開發(fā)人員,。開發(fā)人員則需要在理解先進(jìn)的配置管理和版本控制思想的前提下,使用CVS工具結(jié)合Java開發(fā)工具做到真正的高效管理,??傊诂F(xiàn)代的項目開發(fā)過程中,,CVS已經(jīng)成為解決代碼持續(xù)集成與版本控制的有效工具,。