天天看點

[轉載]CVS 标簽與分支

轉載至IBM【[url=http://www.ibm.com/developerworks/cn/opensource/os-cvs2/]ECLIPSE 小組開發環境實踐: 第 2 部分[/url]】-片段

[b][size=medium]标簽與分支[/size][/b]

[color=red][b]1.标簽[/b][/color]

考慮下面的應用場景:在項目基本完成的時候,我們希望為此時的檔案狀态(快照)建立一個标簽milestone1。在後續的程式修改過程中,如果發現了一些在版本milestone1中不存在的BUG,我們就可以用milestone1這一統一的辨別擷取當時的檔案快照并與修改後的檔案進行對比,而不需要對每個檔案都記住其修訂版号。

在ECLIPSE中,有兩種方法給子產品建立标簽。方法1.在工作拷貝上建立标簽,就JAVA項目而言,可以通過JAVA透視圖的右鍵菜單進行操作;方法2. 在CVS資源庫視圖中建立标簽。在建立标簽之前,最好保持工作拷貝與資源庫的同步。以方法2為例,在CVS資源庫視圖的HEAD節點下選中希望建立标簽的子產品,在出現的右鍵菜單中選擇【Tag as Version...】,在随後出現的對話框中添加标簽名即可。圖29是對子產品UnitTest建立了milestone1和milestone2兩個标簽後的結果。

[b]圖29:建立了兩個标簽後的CVS資源庫視圖[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image024.png[/img]

标簽與檔案修訂版号的關系見圖30。某個标簽内各個檔案的修訂版号可能不同,例如在标簽1中,檔案A的修訂版号是1.2,而檔案B的修訂版号是1.3;同一個檔案的相同修訂版号也可能分屬于不同的标簽,例如在标簽1和标簽2中,檔案B的修訂版号都是1.3。

[b]圖30:标簽示意圖[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image026.gif[/img]

從标簽簽出的子產品是靜态的,即使修改了本地的拷貝檔案也不能向資源庫送出。為了證明這一點,讀者可以先簽出Versions節點下的子產品,在本地做修改後再向CVS資源庫送出修改。此時将出現類似圖31的錯誤提示畫面。表明送出的檔案屬于标簽milestone1,而milestone1不是分支因而不能送出。

[b]圖31:從标簽簽出的拷貝修改後也不能被送出[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image027.png[/img]

[color=red][b]2.分支[/b][/color]

[b]2.1 建立分支 [/b]

雖然通過标簽可以友善地管理多個檔案的修訂版号,但是通過标簽獲得的檔案拷貝是靜态的,無法在其基礎上修改并送出。是以,也就不能支援下面場景中的并發開發。假設某軟體公司經過一段時間的開發,釋出了産品A的1.0版。為了進一步擴大該産品的市場佔有率,随即在1.0版本的基礎上進一步研發功能更強大的2.0版。但是公司還必須對産品1.0版進行維護和支援,如果使用者在1.0版的使用過程中發現了BUG,應能盡快推出1.0修正版并釋出相應的更新檔程式。也就是說,開發人員要能在1.0修正版與2.0版這兩條開發路線上同時工作。建立分支則可以支援上述要求。

與建立标簽類似,在ECLIPSE中建立分支也有兩種方法。本文以在CVS資源庫視圖中的操作為例示範分支的建立過程,其步驟如下:

[color=indigo]1. 按建立标簽的方法建立一個新的标簽,例如v1_0。

2. 選中新标簽v1_0,在右鍵菜單中選擇【Add to Branch List...】(不限于新标簽v1_0,可以在任意标簽上操作,但是建立分支應當在關鍵時刻進行)。

3. 在出現的對話框中輸入分支名,例如輸入"UnitText1_0_X"并确定,此時就建立了分支。但是,此時的分支是空的,沒有與之相關聯的資源。

4. 選中新标簽v1_0,在右鍵菜單中選擇【Tag with Existing...】,在出現的對話框中打開節點Branches并選擇在步驟3建立立的分支UnitText1_0_X,最後按OK按鈕确定後就完全建立了一個新的分支。[/color]分支建好後的CVS資源庫視圖如圖32所示。

[b]圖32:建立分支後的CVS資源庫視圖[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image029.png[/img]

現在,就可以從主分支和UnitText1_0_X分支分别獲得工作拷貝。從主分支獲得的工作拷貝在送出後将反映到主分支上,而從UnitText1_0_X分支上獲得的工作拷貝在送出後将反映到UnitText1_0_X分支中,在主分支和UnitText1_0_X分支上可以互不影響地進行并發開發。結合上述開發場景,産品A 1.0版的修正版對應UnitTest1_0_X分支,而産品A 2.0版可以在主分支上繼續開發。

[b]2.2 分支修訂版号[/b]

分支中的修訂版号與主分支中的修訂版号略有不同,主分支、分支及修訂版号的關系可用圖33來說明。

[b]圖33:主分支與分支示意圖[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image031.gif[/img]

圖34顯示了檔案cvstest.txt在UnitTest1_0_X分支上第一次送出後修訂版号的變化情況。其修訂版号不是從"1.10"轉變為"1.11",而是轉變為"1.10.2.1"。如果對該檔案再進行一次送出,其修訂版号将轉變為"1.10.2.2"。即變化的是最後一個小數點後的數字。

[b]圖34:分支修訂版号變化[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image032.png[/img]

[b]2.3 将分支上的修改合并到主分支 [/b]

繼續2.1中的場景,開發人員在開發産品A 2.0版的同時還對1.0版進行維護。開發人員根據産品A 1.0版使用者的回報修正了一些BUG,由于産品A 2.0版也是基于1.0版繼續開發的,他們發現有些BUG在開發中的2.0版中也存在。此時,就希望能将1.0修正版中的修改合并到主分支中。

圖35-39示範了分支合并的過程。建立UnitTest1_0_X分支後繼續在主分支上修改并送出cvstest.txt,結果如圖35所示。

[b]圖35:分支合并1--主分支中的檔案内容[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image034.png[/img]

從UnitTest1_0_X分支簽出一個項目(如果使用者jiangch或cvsuser2使用現有的ECLIPSE,則在簽出項目時需要選擇【Check Out As...】菜單并給項目取一個不同于"UnitTest"的名字),對檔案cvstest.txt進行修改并送出,結果如圖36所示。從圖36還可以看出,從分支簽出的項目在項目名稱的後面還會注明分支的名稱。

[b]圖36:分支合并2--UnitTest1_0_X分支中的檔案内容[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image036.png[/img]

選擇主分支工作拷貝的cvstest.txt,在其右鍵菜單中選擇【Team】→【Merge...】,出現如圖37所示的對話框。在"希望被合并的分支或标簽"輸入框中輸入"UnitTest1_0_X";在随後的"通用基版本" 輸入框中輸入"v1_0",其意義為分支的起源版本(參見本文建立分支的步驟3和步驟4)。

[b]圖37:分支合并3--選擇希望被合并的分支及其起始标簽[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image038.png[/img]

在圖37中點選"Finish"按鈕,将出現同步透視圖。如果希望将分支中檔案内容的第二行合并到主分支中,隻需将其從對比編輯器第二列拷貝至第一列,然後在檔案的右鍵菜單中選擇【Mark as Merged】(見圖38),最後在檔案的右鍵菜單中選擇【Commit】。

[b]圖38:分支合并4--在透視圖中進行合并操作[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image040.png[/img]

合并後的結果見圖39。

[b]圖39:分支合并5--合并後主分支的結果[/b]

[img]http://www.ibm.com/developerworks/cn/opensource/os-cvs2/images2/image042.png[/img]

[b]學習[/b]

免費電子書《Open Source Development with CVS》: [url=http://cvsbook.red-bean.com/]http://cvsbook.red-bean.com/[/url]

CVS和Nightly Build技術,楊錦方,清華大學出版社,2002

CVSNT與ECLIPSE版本配合的相關資訊:

[url=http://download.eclipse.org/eclipse/downloads/drops/R-3.1-200506271435/eclipse-news-part1c.html]http://download.eclipse.org/eclipse/downloads/drops/R-3.1-200506271435/eclipse-news-part1c.html[/url]

CVSNT與CVS的比較: [url=http://www.march-hare.com/cvspro/compare.html]http://www.march-hare.com/cvspro/compare.htm[/url]

ECLIPSE官方網站: [url=http://www.eclipse.org]http://www.eclipse.org[/url]

CVSNT的官方網站:[url=http://www.march-hare.com]http://www.march-hare.com[/url]

在DeveloperWork網站上還有一篇關于ECLIPSE與CVS的文章:[url=http://www.ibm.com/developerworks/cn/linux/opensource/os-ecshare/index.html]使用 Eclipse 平台共享代碼 -- Eclipse 如何使用源代碼版本控制[/url]

[b]獲得産品和技術[/b]

ECLIPSE下載下傳位址:[url=http://www.eclipse.org/downloads/]http://www.ECLIPSE.org/download/[/url]

CVSNT下載下傳位址:[url=http://www.march-hare.com/cvspro/]http://www.march-hare.com/cvspro/[/url]

繼續閱讀