CVS 設置

 

url:http://www-128.ibm.com/developerworks/cn/opensource/os-cvs/



ECLIPSE 小組開發環境實踐: 第 1 部分

developerWorks
文檔選項
將此頁作爲電子郵件發送

將此頁作爲電子郵件發送


對此頁的評價

幫助我們改進這些內容


級別: 初級

姜昌華 , 華東師範大學計算中心

2006 年 1 月 16 日

版本管理系統可以幫助開發人員有效地管理軟件資源的版本問題。CVS(Concurrent Version System)是目前最常用的版本管理系統,而 ECLIPSE 是最流行的開放源碼的集成開發環境。在 ECLIPSE 中,與 CVS 相關的功能被統稱爲小組開發環境。本系列的第 1 部分不僅解釋了 CVS 的相關術語,還詳細介紹了小組開發環境的建立過程;本系列的第 2 部分則試圖以一種簡明易懂的方式來講解 ECLIPSE 小組開發環境的使用方法。

1.前言

版本管理系統可以幫助開發人員有效地管理軟件資源(源代碼文件、配置文件等)的版本問題。版本管理系統可以幫助開發人員追蹤文件的修改履歷;防止文件因疏忽而被錯誤的修改、刪除;在小組開發環境中,幫助多個開發人員保持文件的同步;通過文件的修改履歷,還可以幫助開發人員發現修改過程中產生的BUG,因此應用CVS可以在一定程度上提高軟件的開發效率。現在很多開發工具中都集成了CVS功能,例如ECLIPSE、InteliJ、NetBeans等;雖然ECLIPSE等集成開發環境(IDE)對CVS提供了很好的支持,可以大幅降低CVS的使用難度,但是很多開發人員在使用CVS時還是不知所措。筆者認爲這是由於他們不瞭解CVS的相關術語及CVS的工作模式所致。因此,本文首先介紹CVS的相關術語及CVS的工作模式。然後通過一些實例與應用場景, 展示如何在ECLIPSE中使用小組開發環境。

本文所使用的ECLIPSE沒有安裝本地語言包插件,操作界面爲英文。但理解了相關術語後,讀者即使在中文環境中也能正常操作。



回頁首


2.CVS的相關術語與CVS工作模式

2.1 術語解釋

修訂版(revision):CVS版本管理系統用修訂版來管理文件的修改履歷,修訂版用版本號來表示,即修訂版號。對文件的每次修改(提交)都產生一個新的修訂版。

資源庫(repository):資源文件的集合,版本管理的容器。在ECLIPSE中被稱爲CVS存儲庫。

模塊(module):資源文件的組織形式,在版本管理系統中的表現形式爲目錄(樹形結構,可以嵌套)。

輸入(import):將處於資源庫之外的軟件模塊登錄到資源庫。

輸出(export):從資源庫中取出模塊。使用export方式取出的模塊拷貝不包含版本管理的相關信息,對該模塊拷貝的修改也不能反映到資源庫。

工作拷貝(working copy):版本管理系統是一個典型的CLIENT/SERVER系統。用戶對資源的修改不是直接在SERVER端進行的,而是根據資源庫的內容創建一個本地的工作拷貝,用戶在工作拷貝中工作,工作完成後再將修改的內容提交到資源庫。

簽出(checkout):獲得工作拷貝的操作。此前使用過Visual Source Safe的讀者需注意,在Visual Source Safe中的checkout用於鎖定文件。

簽入/提交(checkin/commit):將對工作拷貝的修改反映到資源庫中的操作。在CVS中使用的術語是提交;在Visual Source Safe中使用的術語是簽入。

更新(update):將資源庫中的最新狀態反映到工作拷貝的操作。

衝突(conflict):在資源庫同工作拷貝之間狀態不一致的狀態下進行簽入或更新操作時,版本管理系統可能會盡量進行合併,如果版本管理系統不能完全處理上述不一致,就稱之爲產生了衝突。

快照(snapshot):在某一時刻,模塊中文件狀態(包括文件內容及其版本管理元信息)的靜態影像。

標籤(tag):由於CVS以文件爲版本管理的基本單位,隨着開發的進行,對不同的文件的修改次數是不一樣的,各個文件的修訂版號會因此而變得參差不齊。這不便於模塊的管理。爲此可以對某個時刻的快照賦予一個標識名稱,標識名稱就被稱爲標籤。將來通過標籤就可以獲得模塊在該時刻的快照。通過標籤所獲得的快照是靜態的,不能被修改。在ECLIPSE中,標籤與版本(Version)是同義詞,一般都用於文件集合。需要指出的是:在很多中文資料裏,修訂版與版本往往不加區分,有時會將單個文件的修訂版也稱爲版本。例如,"A文件最新版本是1.3",這句話中的版本實際上指的是修訂版。因此,需要根據上下文來確定版本的意義。

分支(branch):分支是一種特殊的標籤。從分支中籤出的資源是可以被修改的。引入分支是爲了更好地支持項目的並行開發過程。

2.2 工作模式

爲了解決因多人同時開發而可能產生的衝突問題,版本管理系統有兩種常用的工作模式。

模式一:鎖定-修改-解鎖模式

在這種工作模式中,一個開發人員爲了能夠修改文件,首先必須鎖定文件,鎖定文件操作賦予了開發人員修改文件的權力。從一個文件被鎖定後到其被解鎖前,其他的開發人員不能再鎖定該文件。這種工作模式適用於小規模的開發小組。如果採用這種工作模式,開發人員應儘量少、儘可能晚地鎖定文件並儘可能早解鎖文件。模式一是Visual Source Safe的缺省工作模式。

模式二:拷貝-修改-合併模式

在這種工作模式中,每個開發人員都從資源庫獲得自己的工作拷貝,然後就可以自由的在工作拷貝中繼續開發,開發完成後再向資源庫提交自己的工作成果。如果在提交時產生了衝突,則必須在解決衝突後才能再提交。模式二比模式一具有更好的併發性,因而也適用於中、大規模的開發小組。模式二是CVS所採用的工作模式。

鎖定-修改-解鎖模式是一種悲觀的鎖定模式,它假定在開發過程中可能會產生大量的衝突;而拷貝-修改-合併模式則比較樂觀,它假定在開發過程中軟件的設計及開發任務的分配都比較合理(軟件的模塊化程度高,開發人員一般各司其職),在開發過程中即使會產生衝突,但產生衝突的機率比較小。爲了更好地使用CVS,我們在使用CVS時也應該遵循它的設計前提,努力提高軟件的設計水平及項目管理的能力,否則將陷入疲於解決提交衝突的尷尬境地。

如果想進一步瞭解CVS的理論知識,請參看文後的參考資料1和參考資料2。



回頁首


3.環境安裝

LINUX與WINDOWS是目前應用最普及的操作系統。下面首先介紹CVS服務器在兩種操作系統上的安裝與配置過程,然後介紹如何從ECLIPSE連接CVS服務器,最後介紹如何使用ECLIPSE共享模塊。無論後臺的CVS安裝在何種操作系統之上,對於ECLIPSE來說,與CVS服務器建立了連接之後其使用方法是一樣的。

3.1 在FEDORA CORE3上安裝、配置CVS

3.1.1 安裝CVS

本文所使用的LINUX發行版爲FEDORA CORE3。首先,查看在系統中是否已經安裝了CVS服務器,如果沒有安裝,則可以從FEDORA CORE3的發行光盤或從網絡上下載相應的軟件包,本文中使用的軟件包爲cvs-1.11.17-7.FC3.i386.rpm。安裝過程如下(在本節中,綠色的爲命令行,緊隨命令行的黑色文本爲系統響應):






可以用如下命令查詢系統中是否已經安裝了CVS服務器:






確認在文件/etc/services中含有以下內容:






在目錄/etc/xinetd.d中建立一個文件cvspserver,文件內容如下:






其中,--allow-root的值爲CVS資源庫的根目錄。如果建立自己的CVS服務器,需要根據實際情況作相應的修改。

3.1.2 啓動CVS服務

在FEDORA CORE中的CVS服務由xinetd管理,安裝完成後通過下面的命令可以啓動CVS服務:






3.1.3 初始化資源庫

在LINUX中,可以用下面的命令初始化CVS資源庫:






3.1.4 添加CVS用戶

初始化資源庫後,會在CVS資源庫的根目錄下生成一個新的目錄CVSROOT。在目錄中新建一個名爲passwd的文件,爲了簡便,文件內容的格式爲:
用戶帳號:密碼
每個用戶一行,用戶帳號應在系統中存在。由於密碼必須是加密的,可以從文件/etc/shadow中提取。這樣CVS用戶將與LIUNX系統用戶具有相同的帳號和密碼。

3.1.5 注意事項

在缺省狀態下LIUNX的安全性比較高,對目錄、文件的讀寫操作有較嚴格的控制。爲了在LINUX下方便的使用CVS,最好建立一個組(group),例如"cvsusers",將CVS的用戶都加入"cvsusers"中。這樣一來,只要將CVS資源庫根目錄及其所有子目錄(含目錄中的所有文件)的讀寫權限賦予組"cvsusers",組中的所有用戶都能使用CVS。

3.2 在WINDOWS XP上安裝、配置CVSNT

本文以下的內容都基於WINDOWS XP+CVSNT+ECLIPSE。整個實驗環境包括兩臺以WINDOWS XP2爲操作系統的計算機,其中一臺名爲"chjnb"的計算機既作爲CVS服務器又安裝了ECLIPSE作爲客戶端,而另一臺只安裝了ECLIPSE。CVSNT與ECLIPSE都採用了本文寫作時的最新版本,分別是CVSNT2.5.03.2151和ECLIPSE3.1.1。ECLIPSE3.1.1可以和CVSNT2.0.58b以上版本很好的協同工作(見參考資料3)。

CVSNT最初起源於CVS,也是一個開放源碼產品,具有跨平臺的能力,可以運行在多種操作系統之上。WINDOWS版的CVSNT在安裝和使用上都比較方便,對WINDOWS用戶而言具有很強的親和力。WINDOWS版的CVSNT經過多年的發展,其功能與穩定性得到不斷的加強,完全可以勝任實際工作中的版本管理任務。而且相對於CVS而言,CVSNT還擴展了不少功能。CVSNT與CVS的比較請參看參考資料4。

3.2.1 安裝CVSNT

CVSNT可以從以下地址獲得http://www.march-hare.com/cvspro/。在WINDOWS系統上CVSNT有安裝程序cvsnt-2.5.03.2151.msi(隨版本的不同文件名也不同)。一般採取缺省安裝方式安裝後,CVSNT即可正常工作,如果想控制安裝過程,則可以選擇定製安裝方式。例如在圖1、圖2中修改了安裝目錄。


圖1:選擇CVSNT的安裝類型
圖1:選擇CVSNT的安裝類型

圖2:修改CVSNT的安裝目錄,選擇CVSNT的可安裝組件
圖2:修改CVSNT的安裝目錄,選擇CVSNT的可安裝組件

安裝完成後可以通過菜單操作【開始】→【CVSNT】→【CVSNT Control Panel】或控制面板打開CVSNT的控制管理臺。爲了使用CVSNT進行版本管理,首先必須建立一個資源庫。在CVSNT的控制管理臺中選擇"Configuration Repository"面板並單擊"Add",出現如圖3所示的畫面。


圖3:初始化資源庫
圖3:初始化資源庫

在Location中填入資源庫的位置,在Description中填寫該資源庫的說明信息(可以爲空)。值得注意的是當Location包含多級目錄時,Name輸入框中的缺省值不對,需要修改,例如可以使用最後一級目錄名,如圖3。最後點擊"OK"按鈕,在隨後出現的詢問是否初始化資源庫的確認對話框中選擇"Yes"即可。

3.2.2 Windows防火牆

如果在安裝有CVS服務器的計算機上使用的是WINDOWS XP2操作系統,並且WINDOWS XP2自帶的Windows防火牆處於啓用狀態,則不能從其它計算機連接CVS服務器。讀者可以暫時關閉Windows防火牆或者將CVSNT服務的端口號(2401)添加到Windows防火牆的例外中,其設置步驟如下:

1.從WINDOWS操作系統的控制面板中雙擊"Windows防火牆"的圖標,出現如圖7所示的畫面。


圖7:Windows防火牆控制檯
圖7:Windows防火牆控制檯

2.在圖7中單擊"添加端口"按鈕,請按圖8將CVSNT的服務端口加入防火牆的例外列表。


圖8:將CVSNT的服務端口加入防火牆的例外列表
圖8:將CVSNT的服務端口加入防火牆的例外列表

3.在圖8中按"確定"按鈕就把CVSNT的服務端口加入防火牆的例外列表,見圖9。


圖9:CVSNT的服務端口已被加入到防火牆的例外列表
圖9:CVSNT的服務端口已被加入到防火牆的例外列表

如果使用了其他的防火牆產品,也應進行相應的設置。

3.2.3 建立CVS用戶

爲了在我們的實驗環境中模擬多個用戶,還需要在CVS服務器中建立至少兩個CVS用戶。由於CVSNT安裝後採用混合認證方式工作,CVS服務器的系統用戶和在CVS本身管理的用戶文件中定義的用戶都能使用CVSNT服務。爲了簡便,本文建立了兩個系統用戶。在WINDOWS XP中可以通過計算機管理這一工具追加系統用戶,如圖6所示。除了管理員帳號jiangch(我將管理員Administrator重命名爲jiangch),還添加了一個帳戶cvsuser2。


圖6:添加用戶帳號
圖6:添加用戶帳號

現在可以在另一臺計算機的ECLIPSE中,以cvsuser2爲用戶名建立與CVSNT服務器的連接。至此,我們就建立了一個完整的實驗環境。本文的實驗環境用了兩臺計算機,如果計算機的內存夠大,也可以在一臺計算機上建立一個完整的實驗環境。

3.3 建立ECLIPSE與CVS服務器的連接

ECLIPSE可以從http://www.ECLIPSE.org/download下載。ECLIPSE無需安裝,在已安裝JRE或JDK1.4.2或以上版本的計算機上,只要將下載的文件解壓後即可運行。爲了能在ECLIPSE使用CVS,需要建立ECLIPSE與CVS服務器的連接。其操作步驟如下:

1.打開CVS Repository視圖(Perspective),可以通過如下菜單操作實現:【Window】→【Open Perspective】→【Other...】。在出現的對話框中選擇CVS Repository Exploring。

2.在CVS Repository視圖中單擊右鍵,選擇【New】→【Repository Location...】(在ECLIPSE中,如果菜單項的後面有省略號,則表示選擇該菜單項後,將出現對話框供用戶進一步設定相關信息)。出現如圖4所示對話框。在對話框中填入適當的信息即可。例如,根據圖中的示範信息,將與我們在前面步驟所安裝的CVSNT服務器建立連接。需注意的是:在Host輸入框中可以輸入CVS服務器的名字或IP地址;在連接類型下拉框中選擇pserver,這是CVSNT+ECLIPSE最簡便的配置方式。


圖4:在ECLIPSE中建立與CVSNT服務器的連接
圖4:在ECLIPSE中建立與CVSNT服務器的連接

建立連接後,在ECLIPSE的CVS資源庫透視圖中的結果如圖5所示。其中的HEAD表示主分支(主幹)、Branches是分支的集合、Versions是標籤的集合、Dates是用時間做標籤的集合。由於jiangch是管理員帳戶,因此還顯示了CVSNT的管理文件集合CVSROOT。如果以非管理員帳戶連接到CVSNT服務器,則看不到上述CVSROOT。


圖5:CVS資源庫視圖
圖5:CVS資源庫視圖


回頁首


4.模塊的輸入與簽出

4.1 輸入(import)

在正式的項目開發中,輸入模塊通常由CVS管理人員或項目經理完成,一般的開發人員不需要進行此項工作。在ECLIPSE中,可以將整個項目作爲一個模塊導入CVS資源庫。這也是實際工作中經常採用的工作方式。我們事先在計算機chjnb的ECLIPSE中建立了一個項目UnitTest,如圖10所示。


圖10:演示用項目的導航器視圖
圖10:演示用項目的導航器視圖

爲了將項目導入CVS資源庫:打開ECLIPSE,選擇希望導入CVS資源庫的項目(project),點擊右鍵,在出現的彈出菜單中依次選擇【Team】→【Share Project...】,出現圖11。


圖11:共享項目--選擇資源庫
圖11:共享項目--選擇資源庫

點擊Next按鈕,在下一個對話框中選擇"use project name as a module name",再點擊Next按鈕,此時,出現如圖12所示的對話框。


圖12:共享項目--控制共享內容
圖12:共享項目--控制共享內容

有一些文件,我們不想加入CVS資源庫。例如圖9中的bin目錄,裏面放的是編譯時生成的class文件。此時,可以在上述對話框的bin目錄上點擊右鍵,在出現的彈出菜單中選擇【Add to cvsignore...】,出現圖13。(注:在preference中也可以進行設定)在圖13中單擊OK按鈕。


圖13:共享項目--選擇哪類資源不用放入資源庫
圖13:共享項目--選擇哪類資源不用放入資源庫

隨後單擊圖12中的Finish按鈕,在接下來的一系列對話框中,選擇Yes。隨後出現如圖14的對話框,在輸入框中輸入註釋,例如:"XXX項目初始化"。 最後單擊OK按鈕。ECLIPSE將向CVS資源庫中導入代碼模塊。


圖14:共享項目--填寫註釋
圖14:共享項目--填寫註釋

模塊導入成功後, java視圖如圖15所示。處於CVS管理狀態的目錄和文件,其圖標的右下角有一個小圓柱。由於在前面的操作中,我們將bin目錄排除了,因此bin目錄顯示爲通常的圖標。在文件的後面,顯示了該文件的修訂版號,而在目錄的後面則沒有,這是因爲CVS系統版本管理的對象只是文件,而目錄不是CVS版本管理的對象。所有文件的初始修訂版號均爲1.1。輸入成功後,整個項目本身也處於簽出的狀態。


圖15:處於版本管理狀態下的項目視圖
圖15:處於版本管理狀態下的項目視圖

4.2 簽出(checkout)

如果想通過其它計算機上的ECLIPSE獲得工作拷貝,按2.2的操作成功建立連接後,CVS Repository透視圖見圖16。在主分支HEAD下的 UnitTest上點擊右鍵,在出現的彈出菜單中選擇【Check Out】,這將簽出CVS資源庫中的模塊UnitTest,並在ECLIPSE建立一個名爲UnitTest的新Project。簽出成功後轉到java視圖,會看到一個和圖15類似的界面。


圖16:在CVS資源庫中已經存在一個共享項目UnitTest
圖16:在CVS資源庫中已經存在一個共享項目UnitTest

在菜單中還有一項【Check Out As...】,通過此菜單項,可以對簽出進行更細緻的控制,例如,可以更改Project名;可以將簽出的內容追加到已有Project中。



回頁首


結束語

在本系列的第1部分,介紹了CVS的相關術語及小組開發環境的建立過程。在本系列的第2部分,將詳細介紹ECLIPSE小組開發環境的使用方法。



回頁首


參考資料

學習

獲得產品和技術


回頁首


關於作者

姜昌華,目前就職於華東師範大學計算中心,從事軟件開發及相關的教學工作。曾採用ECLIPSE和CVSNT開發過多個J2EE項目。您可以通過[email protected]與他聯繫。




回頁首


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章