《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > Java程序開(kāi)發(fā)過(guò)程中的CVS控制

Java程序開(kāi)發(fā)過(guò)程中的CVS控制

2009-01-08
作者:王京武,劉東波,李由

1 引言?

??? 當(dāng)前的信息系統(tǒng)開(kāi)發(fā)過(guò)程存在著以下兩個(gè)急需解決的問(wèn)題。第一,開(kāi)發(fā)過(guò)程中代碼的持續(xù)集成問(wèn)題,。過(guò)去的系統(tǒng)集成,,開(kāi)發(fā)人員必須跑遍整個(gè)開(kāi)發(fā)中心,,詢問(wèn)每一個(gè)程序員有沒(méi)有新的代碼,然后把這些新代碼拷貝過(guò)來(lái),再找到合適的插入位置,這樣集成方式效率低下,,錯(cuò)誤率極高。第二,,版本控制問(wèn)題,。由團(tuán)隊(duì)進(jìn)行開(kāi)發(fā)的項(xiàng)目,尤其是開(kāi)源的項(xiàng)目,,版本的控制是復(fù)雜的,。開(kāi)發(fā)人員對(duì)于版本定義的不一致,以及先前版本的內(nèi)容不完整甚至是丟失都是危險(xiǎn)的,。對(duì)于上述問(wèn)題最簡(jiǎn)單的解決方案就是:使用一套具有網(wǎng)絡(luò)功能并且?guī)в凶岄_(kāi)發(fā)者輕松獲取源代碼的配置管理系統(tǒng)作為所有代碼的來(lái)源,然后再使用一套版本管理工具,,以做到安全正確地記錄和使用各個(gè)時(shí)期各個(gè)版本中的文件,。?

??? CVS是一套出色的開(kāi)放源代碼的集配置管理與版本控制一體的工具,管理所有的源文件以及軟件的版本信息,。這里的源文件不僅僅是代碼源文件,,還包括創(chuàng)建的腳本文件、屬性文件,、庫(kù)文件等,。?

??? 正確地在系統(tǒng)開(kāi)發(fā)過(guò)程中,尤其是在企業(yè)級(jí)開(kāi)發(fā)或開(kāi)源開(kāi)發(fā)過(guò)程中使用CVS控制工具,,體現(xiàn)了軟件配置管理與版本控制相結(jié)合的思想,,這也是開(kāi)發(fā)人員和團(tuán)隊(duì)所必須具備的技能。?

2 CVS的概念?

??? CVS(Concurrent Versions System)是目前業(yè)界使用比較廣泛,思想比較先進(jìn),,控制比較簡(jiǎn)單的配置管理與版本控制一體的工具,。CVS是基于Unix體系中成熟的SCCS(Source Code Control System)和RCS(Revision Control System)開(kāi)發(fā)而成的一個(gè)開(kāi)放源碼的項(xiàng)目,已經(jīng)支持在Windows操作系統(tǒng)上的應(yīng)用,。由于開(kāi)放源碼項(xiàng)目的開(kāi)發(fā)者分布很廣泛,,對(duì)于源文件和版本信息的管理難度很大,需要一個(gè)結(jié)構(gòu)簡(jiǎn)單,、功能強(qiáng)大,、能夠跨平臺(tái)的工具進(jìn)行控制,所以開(kāi)放源碼項(xiàng)目配置管理與版本控制已經(jīng)成為目前CVS的一個(gè)典型應(yīng)用,。

2.1 CVS的結(jié)構(gòu)?

??? CVS的基本工作思路就是在一臺(tái)服務(wù)器上建立一個(gè)倉(cāng)庫(kù),,倉(cāng)庫(kù)里可以存放許多不同項(xiàng)目的源程序,由倉(cāng)庫(kù)管理員統(tǒng)一管理這些源程序,。這樣就好象只有一個(gè)人在修改文件一樣避免了沖突,。每個(gè)用戶在使用倉(cāng)庫(kù)之前,首先要把倉(cāng)庫(kù)里的項(xiàng)目文件下載到本地,。用戶做的任何修改都是在本地進(jìn)行的,,然后用CVS 命令進(jìn)行提交,再由 CVS 倉(cāng)庫(kù)管理員統(tǒng)一修改,。這樣就可以做到跟蹤文件的變化,,控制代碼的沖突?;谝陨系墓ぷ魉悸稢VS采用客戶機(jī)/服務(wù)器的結(jié)構(gòu),,軟件的源文件以及各種版本信息存儲(chǔ)在作為倉(cāng)庫(kù)的中心服務(wù)器內(nèi),開(kāi)發(fā)者可以隨時(shí)通過(guò)CVS的客戶端工具將本地源文件的副本與中心服務(wù)器倉(cāng)庫(kù)中的源文件保持一致,。CVS的結(jié)構(gòu)如圖一所示,。?

圖一:CVS結(jié)構(gòu)圖

2.2  CVS的重要術(shù)語(yǔ)?

2.2.1 Module(模塊)相互關(guān)聯(lián)的一組文件的集合,一般一個(gè)Module會(huì)和一個(gè)工程相對(duì)應(yīng),。2.2.2 Respository(倉(cāng)庫(kù)):存放Module的倉(cāng)庫(kù),,可以在開(kāi)發(fā)人員的本地也可以在遠(yuǎn)程CVS服務(wù)器上。

2.2.3 Branch(分枝):Branch是倉(cāng)庫(kù)中獨(dú)立派生的一個(gè)分離的開(kāi)發(fā)版本,,用于管理源文件的修改,。其中HEAD作為一個(gè)特殊的Branch代表主干版本。HEAD可以分離出不同的Branch,,而每個(gè)Branch中的變更又可以很容易地與HEAD進(jìn)行合并,。這種Branch模型通過(guò)支持源文件的并發(fā)修改,保證了不同開(kāi)發(fā)者的相對(duì)獨(dú)立,,但又高度集成,。

2.2.4 Merge(合并):在CVS版本控制過(guò)程中,,Merge作為一個(gè)核心的工作,將派生的Branch版本與HEAD的最新版本之間的變更合并到開(kāi)發(fā)人員的工作目錄之中,。CVS提供的Merge命令使開(kāi)發(fā)人員在使用源文件時(shí)不會(huì)鎖定該文件,,即同一個(gè)CVS管理的源文件可以被多個(gè)開(kāi)發(fā)人員同時(shí)進(jìn)行修改。

圖二:Java開(kāi)發(fā)過(guò)程中CVS控制的示意圖

2.3  CVS的工作流程?

??? CVS的工作流程包括以下三個(gè)步驟,。

??? 第一,,預(yù)處理。通過(guò)更新操作保證所有本地源文件與最新的Branch中的源文件一致性,。

??? 第二,,代碼開(kāi)發(fā)。在本地進(jìn)行軟件代碼的開(kāi)發(fā),,并在本地保存代碼的修改,。

??? 第三,同步,。當(dāng)做好提交工作的準(zhǔn)備后,,進(jìn)行與服務(wù)器的同步操作。Incoming和Outgoing是CVS工作時(shí)的兩種狀態(tài)模式,,在進(jìn)行Update操作時(shí)(從服務(wù)器得到其他人的修改),,CVS進(jìn)入Incoming狀態(tài);在進(jìn)行Commit操作時(shí)(把本地修改提交給CVS服務(wù)器),,CVS進(jìn)入Outgoing狀態(tài),。在同步階段中,開(kāi)發(fā)人員首先通過(guò)Update操作檢查本地修改是否會(huì)造成與服務(wù)器端源文件的沖突和對(duì)完整性的破壞,,最后向服務(wù)器Commit本地的修改,。CVS版本控制的基本流程如圖三所示:

3 Java程序開(kāi)發(fā)過(guò)程中的CVS控制?

??? Java語(yǔ)言具有語(yǔ)法簡(jiǎn)單、安全,、支持多線程,、具有跨平臺(tái)性以及純面向?qū)ο蟮忍攸c(diǎn)。為了廣泛適應(yīng)各種類型的應(yīng)用模式,,先后出現(xiàn)了J2SE,、J2ME以及J2EE等組件技術(shù)。

??? 現(xiàn)在CVS版本控制器對(duì)于Java提供了無(wú)縫的支持,。眾多Java開(kāi)發(fā)工具都將CVS功能內(nèi)嵌到自身中,,作為其版本控制的基本依托,。主要支持CVS的開(kāi)發(fā)工具有Borland公司的JBuilder和Eclipse組織提供的開(kāi)源工具Eclipse,。其中,JBuilder代表了當(dāng)前主流的商用Java開(kāi)發(fā)工具,,Eclipse則代表了典型的開(kāi)源Java開(kāi)發(fā)工具,。二者在最新的版本中都已經(jīng)利用自身嵌入的CVS控制器實(shí)現(xiàn)了在本地或遠(yuǎn)程CVS服務(wù)器上的軟件版本控制,,從而將先進(jìn)的版本控制思想引入到Java世界中。此外,,對(duì)于其它尚未嵌入CVS的Java開(kāi)發(fā)工具,,開(kāi)發(fā)人員還可以下載得到獨(dú)立的CVS管理器。比較常用的CVS管理器有WinCVS,。三種不同的CVS管理器各有特點(diǎn),,下面分別介紹。

3.1 JBuilder中的CVS控制?

??? JBuilder是Borland公司的Java程序開(kāi)發(fā)的主要工具,,更是J2EE組件技術(shù)開(kāi)發(fā)中的重要商業(yè)工具,。JBuilder的標(biāo)準(zhǔn)版和企業(yè)版中集成了CVS版本控制系統(tǒng)功能,在JBuilder的應(yīng)用瀏覽器中使用CVS的接口可以方便地訪問(wèn)到CVS提供的大部分命令,,從而直接訪問(wèn),、使用和控制本地或遠(yuǎn)程的CVS系統(tǒng)。

??? JBuilder中使用CVS的主要過(guò)程如下:第一,,創(chuàng)建CVS倉(cāng)庫(kù)(Respository),。該倉(cāng)庫(kù)可以位于本地或遠(yuǎn)程服務(wù)器;第二,,創(chuàng)建CVS 模塊(Module),。開(kāi)發(fā)人員在指定的倉(cāng)庫(kù)中創(chuàng)建模塊,一旦工程以模塊的形成存在,,那么工程的內(nèi)容就都在CVS的控制之下了,;第三,將JBuilder開(kāi)發(fā)的源文件添加到CVS倉(cāng)庫(kù)中,;第四,,從CVS倉(cāng)庫(kù)中檢出(check out)模塊內(nèi)容存放到本地工程中;第五,,在檢出的本地工程中修改或刪除源文件,;第六,解決與服務(wù)器倉(cāng)庫(kù)中的代碼沖突,,最終將本地源文件的更新內(nèi)容提交到CVS倉(cāng)庫(kù)中,。

3.2 Eclipse中的CVS?

??? Eclipse是開(kāi)源組織的Java開(kāi)發(fā)工具,可以方便高效地開(kāi)發(fā)J2SE和J2EE等組件技術(shù)下的信息系統(tǒng)或插件,。Eclipse本身內(nèi)置了CVS命令,,不需要使用其他客戶端軟件,可以直接訪問(wèn),、使用和控制CVS的服務(wù)器,。

??? 作為開(kāi)源項(xiàng)目主要使用的開(kāi)發(fā)工具, Eclipse與以JBuilder為代表的商業(yè)開(kāi)發(fā)工具在CVS使用上模式上有很大差別,即Eclipse沒(méi)有在本地創(chuàng)建CVS服務(wù)進(jìn)行控制管理的功能,。其原因在于使用Eclipse開(kāi)發(fā)的開(kāi)源項(xiàng)目,,項(xiàng)目中的源文件需要高度地集中管理,。開(kāi)發(fā)者需要將本地的源文件提交到遠(yuǎn)程服務(wù)器上,由開(kāi)源組織統(tǒng)一進(jìn)行控制,。而JBuilder作為商用工具考慮到應(yīng)用開(kāi)發(fā)者面對(duì)的信息系統(tǒng)的類型很廣泛,,對(duì)于開(kāi)發(fā)規(guī)模較小的應(yīng)用,源文件的控制不需要放置在CVS的遠(yuǎn)程服務(wù)器上,,可以通過(guò)在本地創(chuàng)建CVS服務(wù)的方式進(jìn)行獨(dú)立控制,。

3.3 通過(guò)WinCVS控制Java程序?

??? WinCVS是Windows操作系統(tǒng)下的一種CVS客戶端控制軟件,是目前對(duì)于CVS控制最為完善與靈活的軟件,,其使用方法相對(duì)比較復(fù)雜,。WinCVS獨(dú)立于任何開(kāi)發(fā)工具,因此可以控制多種開(kāi)發(fā)語(yǔ)言的源文件(如:Java,、C/C++,、Pascal)。例如,,對(duì)于使用其他Java開(kāi)發(fā)工具(如:Jdesigner,、TextPad等等)甚至是寫(xiě)字板開(kāi)發(fā)的Java程序源文件,WinCVS都能夠進(jìn)行控制管理,。

??? 使用WinCVS的過(guò)程如下:第一,,配置客戶端與服務(wù)器的參數(shù);第二,,CVS管理人員將源文件導(dǎo)入到服務(wù)器的模塊中,;第三,CVS管理人員創(chuàng)建標(biāo)簽,、分支,;第四,開(kāi)發(fā)人員登錄遠(yuǎn)程CVS服務(wù)器,;第五,,開(kāi)發(fā)人員從服務(wù)器倉(cāng)庫(kù)中檢出(checkout)模塊到本地工程(如圖四所示);第六,,開(kāi)發(fā)人員將本地工程修改過(guò)的文件提交到服務(wù)器的倉(cāng)庫(kù)中,;第七,開(kāi)發(fā)人員在每次對(duì)本地的文件修改前,,將服務(wù)器端倉(cāng)庫(kù)中存放的文件更新到本地工程中,,以保證在多人操作同一個(gè)文件時(shí)不會(huì)引起沖突;第八,,開(kāi)發(fā)人員將本地工程中的修改結(jié)果提交到服務(wù)器倉(cāng)庫(kù)中,;第九,CVS的管理人員合并不同分支(版本)的文件。在整個(gè)過(guò)程中,,管理人員和開(kāi)發(fā)人員可以隨時(shí)察看查看文件的當(dāng)前狀態(tài)和歷史信息。

????????????

圖四:Checkout操作

4 結(jié)束語(yǔ)?

??? 利用CVS工具結(jié)合配置管理和版本控制的先進(jìn)思想管理Java程序開(kāi)發(fā)全過(guò)程,,其目的是建立一整套高效安全的Java軟件項(xiàng)目開(kāi)發(fā)的控制流程,,以到達(dá)軟件工程中對(duì)于軟件開(kāi)發(fā)實(shí)現(xiàn)過(guò)程的要求。

??? CVS工具的作用是提供快捷的方法和清晰的控制流程給開(kāi)發(fā)人員,。開(kāi)發(fā)人員則需要在理解先進(jìn)的配置管理和版本控制思想的前提下,,使用CVS工具結(jié)合Java開(kāi)發(fā)工具做到真正的高效管理??傊?,在現(xiàn)代的項(xiàng)目開(kāi)發(fā)過(guò)程中,CVS已經(jīng)成為解決代碼持續(xù)集成與版本控制的有效工具,。

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]