本文來源:http://www.uml.org.cn/pzgl/200910236.asp
現在,您已經對CVS有了一個基本的理解。接下來,我們將討論Eclipse是如何為CVS使用者提供幫助的。在對其進行討論之前,先略為詳細地看一下Eclipse的CVS用戶界面。在開始之前,Eclipse的CVS用戶界面是毫無價值的。這是因為,與Eclipse中的很多操作相似,大多數的CVS資源庫訪問操作都在后臺運行,這些操作不會對其他操作造成妨礙。諸如檢出、提交、同步等可能需要長時間運行的操作并不會對您所要完成的其他任務造成妨礙。在下面所給出的這個簡短列表中,列出了在Eclipse用戶界面中使用CVS時會碰到的最常見任務。在練習5中,您會實踐所有這些任務。
- 定義到CVS資源庫的連接。
- 瀏覽CVS資源庫。
- 將新的工作空間項目定義到CVS中。
- 從CVS中檢出已有項目。
- 將工作空間中的更改提交給CVS。
- 使用CVS中的最新版本來更新自己的工作空間項目。
- 在合適的里程碑處進行版本設置。
- 用資源庫中的資源來比較或替換工作空間中的資源。
5.4.1 CVS Repository Exploring透視圖:資源庫主頁
如圖5-1所示的CVS Repository Exploring透視圖是在Eclipse中使用CVS的大本營。在該透視圖中含有CVS Repositories視圖、CVS Resource History視圖以及編輯器區域。在CVS Repositories視圖中會顯示出您的工作空間所知道的CVS資源庫。而在CVS Resource History視圖中所顯示的則是受CVS控制的任何已知文件的修改歷史記錄。在CVS Repository Exploring透視圖中,您可以建立與CVS服務器的連接。
5.4.2 CVS Repositories視圖
CVS Repositories視圖扮演著資源庫瀏覽器的角色。在CVS Repositories視圖中,您可以對資源庫中存在的項目進行選擇,并可將這些項目檢出到工作空間中。如圖5-1所示,CVS Repositories視圖位于CVS Repository Exploring透視圖的左邊窗格中。通過使用快捷菜單New | Repository Location...或選擇Add CVS Repository
命令,您可以在自己的工作空間中定義CVS資源庫的位置。Eclipse支持各種類型的CVS連接(見圖5-2)。在CVS Repositories視圖中,您可以定義多個CVS資源庫。在瀏覽資源庫時,您可以看到資源庫中的內容。如圖5-1所示,這些內容包括HEAD、Branches、versions目錄中的項目以及Dates條目。您可展開目錄樹或使用工具欄中的Go Into
和Back
操作來往下一直看到具體文件。在工具欄上有一個Refresh View
操作,由于CVS Repositories視圖不會與資源庫中的內容更改自動保持一致,所以在做任何重要操作之前,您可能要使用Refresh View
按鈕來刷新CVS Repositories視圖。
出于方便的考慮,如果您從Resource透視圖中打開了CVS Repositories視圖,那么該視圖將作為一個選項卡式視圖顯示在Navigator透視圖的旁邊。
在CVS Repositories視圖中,一個最常見的任務是從資源庫中將項目檢出到您的工作空間中。要完成上述任務,請先在Branches、HEAD或Versions下選擇一個項目,然后再在單擊鼠標右鍵后所出現的快捷菜單中選擇Check Out命令。

圖5-1 CVS Repository Exploring透視圖

圖5-2 在工作空間中定義新的CVS資源庫位置
在第一次展開CVS Repositories視圖中的Branches目錄時,您會看到該目錄中沒有任何內容。在使用了快捷菜單操作Refresh Branches…后會出現Refresh Branches對話框(見圖5-3)。在Refresh Branches對話框中,您可以為一個或多個資源庫項目執行CVS中的分支標記檢索請求。CVS資源庫中可以包含大量分支。而您可能僅對其中的部分分支感興趣。在Refresh Branches對話框中,您可以對要進行分支標記信息檢索的項目進行選擇。在表5-1所示的參考列表中,列出了CVS Repositories視圖中的所有可用的快捷菜單操作。其中有些操作依賴于您在圖5-3的第3個欄目中的選擇。一開始,您可能需要使用以下這些操作:New | Repository Location…、Check Out…、Compare with…以及Show in Resource History。現在,您不必理解這些操作,它們僅為您提供一個參考。

圖5-3 Refresh Branches對話框
表5-1 在CVS Repositories視圖中可使用的上下文操作
操 作 | 描 述 | 從快捷菜單中可獲得該命令 |
Add to Branch List… | 將一個項目(但不包括該項目的內容)添加至一個新的或已經存在的分支上。該操作可代替Team | Branch操作。對于那些將在一個分支中單獨開發的新項目來說,該操作是比較有用的 | 被選擇的項目 |
Check Out | 把從資源庫中所選擇的內容復制到自己的工作空間中。而且文件夾可被檢出,同時該文件夾與項目的一致性會得到維護。對于含有獨立部分的大型項目來說,該操作非常有用 | 被選擇的項目,以及在Branches、HEAD或Versions下所選擇的項目文件夾 |
Check Out As… | 把從資源庫中所選擇的內容復制到自己的工作空間中,并以另外一個名稱來命名。在對所做的更改進行提交時,該項目保持它在CVS中的初始一致性。當需要在工作空間中同時擁有某一項目的多個實例時,該操作非常有用 | 被選擇的項目,以及在Branches、HEAD或Versions下所選擇的項目文件夾 |
(續表)
操 作 | 描 述 | 從快捷菜單中可獲得該命令 |
Compare | 在選擇了兩個資源庫文件后,執行該操作會顯示出Compare視圖 | 兩個被選擇的資源庫 |
Compare With… | 該操作會打開Compare with Branch or Verson對話框,并允許您將所選資源與Branches、HEAD或Versions中的資源進行比較 | 被選擇的資源 |
Configure Branches and Versions… | 執行該操作后將顯示出一個對話框。在所顯示的對話框中會顯示出資源中的分支或版本標記。而對話框中所顯示的那些標記會顯示在CVS Repositories視圖中 | 各種對象 |
Copy to Clipboard | 將連接字符串復制到寫字板上。例如:pserver: anonymous@dev.eclipse.org:/home/eclipse | 被選擇的資源庫 |
Discard location | 從CVS Repositories視圖中刪除所選資源庫的位置定義 | 被選擇的資源庫 |
New | Date Tag… | 執行該操作后會顯示出一個對話框以創建新的日期標記 | 被選擇的資源庫,在CVS Repositories視圖中所選擇的Dates條目 |
New | Repository Location… | 執行該操作后將顯示出一個對話框以定義新的CVS資源庫位置。另外還可獲得一個工具欄圖標 | 任何對象 |
Open | 執行該操作后會在編輯器中打開所選文件的最新版本 | 被選擇的文件 |
Properties | 顯示所選資源庫的屬性及其連接信息 | 被選擇的資源庫 |
Refresh Branches… | 執行該操作后將顯示出一個對話框以允許您發現一個或多個項目的分支 | 在CVS Repositories視圖中所選擇的Branches條目,被選擇(或沒有被選擇)的資源庫位置 |
Refresh View | 使用資源庫的當前信息來刷新CVS Repositories視圖 | 各種對象 |
Remove | 將所選的日期標記從CVS Repositories視圖刪除掉 | 被選擇的日期標記 |
Show Annotation | 該操作會為所選文件顯示CVS Annotate視圖 | 被選擇的文件 |
Show In Resource History | 該操作會在CVS Resource History視圖中顯示所選文件的版本歷史信息 | 被選擇的文件 |
Tag As Version… | 將一個版本標記應用到所選的資源及其子資源上 | 被選擇的資源 |
Tag With Existing… | 該操作會將一已有的資源庫版本或分支標記應用到所選的資源上。這是一個比較特殊的操作。有關何時使用該操作的更多信息請參見聯機幫助中的Moving Version Tags專題 | 被選擇的資源 |
5.4.3 CVS Annotate視圖
CVS Annotate視圖與CVS Repository Exploring透視圖中的CVS Repositories視圖使用的是同一界面空間。CVS Annotate視圖用來標識各版本文件中所添加的新行以及被更改過的行。CVS Annotate視圖還會指出做出這次修改的是誰。現在您知道是誰做出了這些難以解釋的更新,或者是誰應該對這些難以解釋的更新負責。對于所選擇的任何版本來說,文件中所添加的新行會在編輯器中突出顯示(見圖5-4)。若要打開CVS Annotate視圖,則從CVS Repositories視圖、CVS Resource History視圖的快捷菜單Team中選擇Show Annotation操作。打開CVS Annotate視圖的一種比較方便的方法是從Navigator透視圖或Package Explorer視圖中所顯示的某一個文件上選擇Team | Show Annotation操作。在打開CVS Repository Exploring透視圖時會打開CVS Annotate視圖,CVS Resource History視圖,并且在編輯器中所打開的文件的版本是最新的。CVS Annotate視圖中的選擇操作會將編輯器復位到被更新的代碼行,并且相應的版本會在CVS Resource History視圖中突出顯示出來。相反,如果在編輯器中選擇了一行代碼,那么在CVS Repository Exploring透視圖的那些視圖中就會適當地對所更改的對象進行突出顯示。現在您就可以非常容易地對任何文本文件的、詳細的更改歷史信息進行檢查。

圖5-4 CVS Repository Exploring透視圖中的CVS Annotate視圖
5.4.4 CVS Resource History視圖
CVS Resource History視圖可顯示某一具體文件的所有版本的詳細信息(見圖5-5)。CVS Resource History視圖是CVS Repository Exploring透視圖的一部分。在CVS Repositories視圖中先選擇一個文件,然后再在單擊右鍵所出現的快捷菜單中選擇Show in Resource History命令,這樣您就可以看到該文件的歷史版本信息。在受CVS控制的項目上單擊鼠標右鍵后所出現的Team快捷菜單項中也有Show in Resource History命令。作為一種查看文件歷史的快速方法,您可以將受CVS控制的工作空間中的某一文件拖放到CVS Resource History視圖以直接查看該文件的歷史信息。

圖5-5 CVS Resource History視圖
對于任何被選擇的修訂版本來說,與該修訂版本相關的分支和版本標記,連同該版本的文件被提交到資源庫時所提供的注釋,都會一起顯示在CVS Resource History視圖的底部(見圖5-5)。通過在CVS Resource History視圖的下拉菜單中進行相應選擇,我們可以隱藏該視圖中的“Tags”項和“Comment”項。
文件的歷史記錄可能比較長,這時,您可以使用CVS Resource History視圖工具欄上的Filter History
按鈕來過濾CVS Resource History視圖。也可以根據作者、注釋值、日期變化等來對CVS Resource History視圖中的顯示內容進行過濾。CVS Resource History視圖工具欄上的Link with Editor操作
會使CVS Resource History視圖與當前活動編輯器(僅對CVS控制之下的文件)保持同步。
對于在CVS Resource History視圖中被選擇的那些版本來說,您對它們可以執行的操作是依賴于資源是否已被復制到工作空間而發生變化的。這些操作被列在表5-2中。
表5-2 CVS Resource History視圖中的操作
操 作 | 描 述 |
Compare | 該操作會對所選的兩個版本進行相互比較 |
Get Contents | 該操作會用所選版本的內容來替換該資源的本地工作副本中的內容 |
Get Sticky Revision | 該操作會將資源的本地工作副本還原為一個先前版本。本地副本會作為資源庫修訂版,并會保留相同的版本標記。需要指出的是,只有在對CVS非常熟悉的情況下,您才可以使用該操作。該操作的后果之一是,除非“sticky revision”標記被移走(直接使用CVS命令),否則您不能提交任何進一步的修改。當然,您可使用Replace With | Latest from Repository操作返回到原版本。通常,除非您是一個熟練的CVS用戶,否則您可能不會對“sticky revision”標記感興趣 |
Open | 該操作會在編輯器中打開所選的修訂版文件。這時,您是不能對該版本文件作出任何更改的 |
(續表)
操 作 | 描 述 |
Refresh View | 該操作會用CVS資源庫中的內容來更新CVS Resource History視圖 |
Show Annotation | 該操作會使Eclipe切換到CVS Repository Exploring透視圖,并使得CVS Annotate視圖變為當前焦點以顯示出所選文件的注釋 |
Tag with Existing… | 該操作會將已有的資源庫版本或分支標記應用到所選的資源上。該操作是一個特殊的操作。請查看聯機幫助中的Moving Version Tags專題以獲得何時使用該操作的詳細信息 |
5.4.5 查看CVS命令
Eclipse Console視圖可顯示出CVS與Eclipse之間的所有的命令和響應;在您碰到問題的時候,該視圖是非常有用的。在Eclipse Console視圖中還顯示了所發布的供用戶使用的任何Eclipse CVS操作的所有CVS命令。在Team | CVS | Console首選項頁面中,您可以對該控制臺的外觀和行為進行配置。
5.4.6 CVS是如何管理工作空間中項目的
圖5-6顯示了Package Explorer視圖中一個處在CVS控制之下的項目。通過觀察圖標上的標記修飾符以及附加的文字信息,您可以很明顯地看出這一點。只有在啟用了Workbench | Label Decorations首選項設置后,Eclipse才會在Package Explorer視圖中顯示附加文字信息。對于那些受版本控制所有資源來說,在它們的資源圖標上都有一個很小的磁盤標志修飾符
。對于那些CVS所不知道的、被添加到項目中的文件來說,在這些文件的圖標中也有一個很小的標志修飾符
。在如圖5-6所示的Package Explorer視圖中,緊接著項目名后面的是該項目所屬CVS資源庫服務器的名稱(位于方括號中)。如果該項目是被作為一個分支部分來使用的,那么該分支的名稱也會被包含在方括號中。文本修飾符>表明本地資源是一個傳出更改(outgoing change),這就意味著該本地資源已經在本地修改過,并與CVS中相應內容不一致。Package Explorer視圖中受CVS控制的文件夾(直至項目文件夾)也具有這個特征。資源名后面的圓括號中所顯示的文本表示的是該資源的文件格式(ASCII格式或二進制格式)。我們知道,對于ASCII文件來說,在CVS文件實例和本地文件實例之間的并行修改可被合并。而二進制文件只能被替換。

圖5-6 Label Decorations首選項被啟用時受CVS控制的項目
在Team | CVS | Label Decorations首選項頁面中,您可以對CVS標簽修飾的表示和規則進行修改。
5.4.7 在Team快捷菜單中可獲得的CVS操作
Team菜單可從任何工作空間資源的快捷菜單中獲得。有幾個CVS操作是與Team菜單相關的。我們將對使用CVS進行工作維護中最常用的操作進行總結。Team菜單下的具體子菜單隨著所選擇的是否是一個項目而發生變化。只有在項目沒有被CVS或任何其他資源庫管理時,所選擇的項目才會有一個Share Project…操作。表5-3所提供的是一個所有CVS小組操作的參考列表。其中有些操作可能是您不熟悉的。我們將在本章后面對這些操作進行討論。通常情況下,您最常用的操作是Share Project…、Synchronize with Repository…、Update…以及Commit…。Share Project操作是一個允許您將項目加到CVS中的綜合性向導。從定義CVS資源庫連接到提交項目資源之間的每一個步驟都包括在該向導中。
表5-3 Team菜單中的CVS操作
操 作 | 描 述 |
Add to .cvsignore… | 該操作會將所選的項目文件排除在CVS管理之外。這些被排除的文件不會出現在Synchronize視圖之中,也不會被提交給CVS資源庫。CVS在您的項目中維護了一個名為.cvsignore的文件。在該文件中會標識出那些被排除的文件實例。一開始,.cvsignore文件是不存在的;在該操作第一次執行時,才會創建.cvsignore文件。您必須將.cvsignore文件添加到版本控制中,并在CVS中維護該文件 |
Add to Version Control | 該操作會將所選文件置于CVS控制之下。典型情況下,在項目中創建新文件時會使用該操作。如果您沒有將資源顯式地添加到版本控制中,那么在執行提交操作時,Eclipse會對您作出提示 |
Apply Patch… | 該操作將使用由Create Patch操作所創建的補丁文件來修補程序 |
Branch… | 該操作會創建一個分支。這樣,項目(或所選資源)可獨立于其他開發過程而被修改 |
Change ASCII/Binary Property… | 執行該操作后會顯示Set Keyword Substitution向導。該向導允許您為所選文件選擇期望的CVS關鍵字替換模式。它對CVS如何解釋ASCII或二進制文件進行了定義 |
Commit… | 如果沒有沖突發生,該操作會使用您的本地更改來更新CVS資源庫,并會提示您給出一個注釋。如果執行該操作時所選擇的操作對象是一個項目或文件夾,那么項目或文件夾中的所有被修改資源都將提交到CVS中。如果CVS中的相應文件取代了所要提交的文件,那么Commit…操作將失敗 |
Create Patch… | 該操作會基于本地資源和CVS之間的不同而創建一個補丁文件。其他人可共享該補丁文件。這就允許在資源庫之外共享您的工作 |
Disconnect… | 該操作會在所選工作空間項目中刪除所有CVS連接信息 |
(續表)
操 作 | 描 述 |
Edit | 該操作只可用于那些啟用了Watch/Edit(可在項目的CVS屬性頁面或CVS首選項設置中啟用該功能)的項目。該操作會通知CVS服務器,讓它知道您正在更新該文件。如果有其他人(一個或多個)正在編輯該文件,那么您將被提示,以就是否繼續該操作作出決定。此時,您可忽略該提示并對文件進行修改。但是,在您試圖對修改進行提交時可能會碰到沖突。如果您只是想先打開所要編輯的文件,那么該文件會被打開。但是在試圖對該文件進行修改時,您會得到相同的提示。如果要使用外部編輯器,那么您首先必須要做的是取消該文件的只讀狀態,然后再使用外部編輯器打開該文件。在后面,我們會對該操作繼續進行討論 |
Merge… | 該操作會將某一具體分支中的修改合并回該分支之前的代碼庫中 |
Restore from Repository… | 對于那些被刪除的項目文件來說,如果它們仍存在于項目中,并允許您將它們恢復回原工作空間,則執行該操作后會列出這些被刪除的文件。在本章后面,我們將會對該操作進行詳細討論 |
Share Project… | 只有項目才能使用該操作。而且,只有在那些不受資源庫管理的項目上才可以看到該操作。執行該操作后會顯示向導。在該向導中,您可以完成的任務有:將項目與一個可以使用的資源庫相關聯,以及提交項目資源。其他資源庫提供程序也可能會使用該操作 |
Show Annotation | 執行該操作后將切換到CVS Repository Exploring透視圖,并會將焦點集中到CVS Annotate視圖以顯示出所選文件的注釋 |
Show Editors | 該操作適用于那些啟用了Watch/Edit(可在項目的CVS屬性頁面或CVS首選項設置中啟用該功能)的項目中的文件夾和文件。在執行該操作后會打開CVS編輯器視圖。在該視圖中會標識出其他正在編輯該文件或該文件夾中內容的用戶。只有那些啟用了Watch/Edit的項目才可能顯示在CVS編輯器視圖中 |
Show in Repository History | 該操作為所選資源顯示CVS Repository History視圖 |
Synchronize with Repository… | 該操作會將所選擇的文件與CVS資源庫中的對應文件進行比較,并切換到Team Synchronizing透視圖。比較后所發現的任何差異都會顯示在Synchronize視圖中。對于項目或文件夾來說,在執行該操作時,它們里面所包含的全部資源都將與CVS中的對應資源進行比較。而那些與CVS中對應資源相比發生了變化的資源會被顯示在Synchronize視圖中。在您檢查所有更改、與資源庫實例進行比較,以及解決沖突時,這是一種最安全的CVS使用方法 |
Tag as Version… | 該操作會為所選項目、文件夾(或文件)以及所有的子文件資源的所有CVS實例添加版本標志。您也可以在CVS Repositories視圖中進行版本標識 |
(續表)
操 作 | 描 述 |
Unedit | 該操作只可用于那些啟用了Watch/Edit(可在項目的CVS屬性頁面或CVS首選項設置中啟用該功能)的項目文件。該操作會將您從當前正在編輯某一文件的那個用戶列表中刪除掉。執行該操作后,您會從當前活動用戶列表中被刪除,并且所做的任何更改都會被取消,而所編輯的文件會恢復到執行任何更新之前的內容。在向CVS提交文件時,如果工作空間副本與服務器副本完全相同,那么Unedit操作會被隱式調用。在本章后面部分,我們還將對該操作進行討論 |
Update… | 該操作會使用CVS中所有最新版本來更新本地資源。CVS中的更新將與本地資源(二進制文件除外)進行合并。建議您在使用Commit…操作前執行Update…操作。如果其他人在您的最近一次更新后又進行了提交操作,那么您的提交操作將會失敗。建議您用Synchronize with Repository…操作來代替Update…操作 |
5.4.8 Team Synchronizing透視圖和Synchronize向導
Team Synchronizing透視圖是您對工作空間與CVS(其他資源庫提供程序可被集成到Team Synchronizing透視圖中)進行同步的大本營。在選擇了Team | Synchronize with Repository…操作后,您會被提示并切換到Team Synchronizing透視圖。在Team Synchronizing透視圖中含有Synchronize視圖和一個編輯器區域。所有被打開的編輯器都會顯示在該編輯器區域中。圖5-7所顯示的就是一個Team Synchronizing透視圖的例子。在Synchronize視圖中,您可以對本地項目和該項目的CVS副本之間的差別進行觀察和操作。其他想使用該透視圖的資源庫提供程序也可使用該視圖。在打開一個文件的同時,Eclipse也會打開一個適當的比較編輯器(文本、Java、XML或圖像)。在比較編輯器中會顯示出工作空間文件和CVS中該文件的最新版本之間的差別。這樣,您就可以在將文件提交到CVS之前瀏覽和最終確定該文件的內容。
在Synchronize視圖的工具欄上有如下一組按鈕:Incoming Mode
(從CVS中更新)、Outgoing Mode
(提交到CVS)、Incoming and Outgoing Mode
以及Conflicts Mode
。通過使用上述按鈕,您可以對同步信息進行過濾。在使用了Incoming Mode按鈕后,您會看到有哪些操作正在進行。如果小組中只有您一個人,那么可能只有Outgoing Mode按鈕才是您感興趣的。若要接受所有的傳入更改,則使用Synchronize視圖工具欄上的Update All Incoming Changes…按鈕
。若要提交您的所有更改,則使用Synchronize視圖工具欄上的Commit All Outgoing Changes…按鈕
。工具欄操作Pin Current Synchronization
允許您對先前同步中所使用的一組資源進行引用。Synchronize視圖的工具欄上的這些按鈕允許您通過工作集來過濾內容。您可對比較標準進行調整,并可使用Layout菜單在樹、壓縮文件夾以及提交集(Commit Set)之間進行視圖切換。提交集允許您查看資源庫更改。這些更改會按照提交者、注釋和提交日期來分類顯示。在確定傳入更改集的更詳細信息時,這種分類非常有用。Synchronize視圖擁有自己的Preferences對話框。在Synchronize視圖的菜單中,您可以打開該Preferences對話框。在Synchronize視圖的菜單中,您還可以執行Schedule…操作。該操作允許您按照所選擇的某一重復進度來自動執行資源庫的同步操作。

圖5-7 顯示傳入更改和傳出沖突文件三方比較的Team Synchronizing透視圖
1. Synchronize向導
從工作臺工具欄(或Synchronize視圖菜單欄)的下拉菜單中選擇Synchronize…操作
后會出現Synchronize向導。在Synchronize向導中,您可以對要與CVS(以及其他那些被允許使用Eclipse小組同步支持的資源庫提供程序)進行同步的項目進行選擇。如圖5-8所示,您可對工作空間、所選資源或者一個工作集進行同步。在Synchronize向導結束后,您會返回到Team Synchronizing透視圖。
5.4.9 處理同一文件的并發更新
首先,我們討論一下一個被建議用來進行修改操作的協議。當在工作空間中使用資源時,您的操作是獨立于CVS資源庫的。因為發生在資源庫中的更改可能是在您不知道的情況下發生的,所以非常重要的一點是,如果還未檢查資源庫中是否有更新取代了您的更改,那么您一定不要提交任何更改。Team | Update…操作會用資源庫中那些取代了您的更改的任何更改來更新項目的本地副本。對于文本文件(包括Java類)來說,Team | Update…操作會自動對任何更改進行合并(從資源庫到工作空間),即使這些更改可能造成沖突。在遇到沖突時,合并操作會用特定的CVS標記文本來標識文件中的沖突,以幫助您識別出沖突行。標記文本并不是與任何類型的文件都兼容,例如它可能導致編譯錯誤。
Update…操作是一個非常強大的操作,我們在練習時一定要小心。在下面這個例子中,Pat和Lynn更新了一個簡單的文本文件。無需知道它,它們都對以“B”和“C”開始的行進行了更新。標記文本會對沖突的那些行以及引入了沖突的版本號(1.2)進行了標識。對于一個帶有眾多沖突的復雜Java文件來說,您可能很難解決其中的沖突。
A is for apple
<<<<<<< sample.txt
B is for bird (updated by pat)
C is for crow (updated by pat)
=======
B is for bobcat (updated by lynn)
C is for cow (updated by lynn)
>>>>>>> 1.2
D is for dog
E is for excellent
F is for farm
G is for goat...
Team | Synchronize with Repository…操作也支持更新,但是該操作不會自動進行更新。在執行該操作后會顯示Synchronize視圖,并會列出工作空間副本和資源庫最新資源之間那些不一致的資源。在Synchronize視圖中,您可以對這些差別進行檢查,并決定所要采取的操作。由于Team | Synchronize with Repository…操作可使您擁有更多的控制權,所以我們建議您使用該操作來代替Update…操作。
下面總結一下文件并發更新的基本規則:在對工作空間中的文件進行修改之前,您必須用資源庫中的所有更改來更新工作空間中的資源。為了安全起見,此時請使用Team | Synchronize with Repository…操作。在Synchronize視圖中,您可執行更新操作,還可提交更改,并可協調沖突。
5.4.10 使用CVS的Watch/Edit支持以避免對同一文件的并行更新
CVS的Watch/Edit支持是Eclipse本身就提供的。如果您同意使用CVS的Watch/Edit支持,那么在提交資源時,您和小組其他成員之間就可以避免沖突。在啟用了CVS的Watch/Edit支持之后,您的項目小組可以更好地理解在所有具體項目中,當前誰正更新文件。相反,前面所討論的CVS Annotate視圖為您所顯示的是先前的更改以及誰做的更改。CVS的Watch/Edit支持是在項目層次上被啟用的。如果在Team | CVS >Watch/Edit的首選項設置頁面中選中了Configure projects to use Watch/Edit on checkout復選框,那么在項目被檢出時,Watch/Edit支持將被自動激活。您也可以通過設置項目的CVS屬性在受CVS管理的現有項目上啟用Watch/Edit支持。在CVS的Watch/Edit支持被啟用時,該項目中的文件處于只讀狀態。此時,如果您在編輯器中打開了某文件后又試圖對該文件進行修改,那么CVS服務器會被詢問。在編輯文件時,如果其他人也正在編輯該文件,那么就會出現一個對話框以通知您小組中其他成員也正在編輯該文件(見圖5-9)。這時,您可以繼續對該文件進行編輯,但是在您提交該文件時需要進行沖突管理。在文件被修改時,檢查標記修飾符
會被添加到該文件上。

圖5-9 顯示其他人正在編輯同一文件的對話框
在項目、文件夾以及文件上執行Team | Show Editors操作后會打開CVS Editors視圖。CVS Editors視圖中列出的是所有正在被其他人更新的資源(見圖5-10)。無論是否處于Watch/Edit的控制之下,您在任何項目及項目資源上都可以使用Team | Show Editors操作。但是Team | Show Editors操作只會對啟用了Watch/Edit支持的項目資源進行標識。

圖5-10 列出了哪個用戶正在更新文件夾中文件的CVS Editors視圖
您可以使用Team | Edit操作來顯式地通知CVS服務器,讓CVS服務器知道您想對文件進行更新。您還可以使用Team | Unedit操作來通知CVS服務器,讓CVS服務器知道您不想再編輯該文件。這樣,您所做的任何更改都會被從CVS資源庫中檢出。表5-3給出了有關這些操作的信息。在向CVS提交了更改之后,Watch/Edit列表中的資源會被隱式刪除掉。
Watch/Edit是一個非常有用的工具。但是該工具的使用需要遵循一些規則,并要注意一些考慮事項。首先,如果要使Watch/Edit功能高效,那么小組中的每個成員都必須在存在潛在沖突的項目中啟動Watch/Edit功能。其次,您必須連接到CVS服務器上。如果您沒有和CVS服務器相連,并且想更新一個文件,那么您將不得不顯式地將該文件的只讀狀態(從該文件的屬性頁面中可獲得該屬性)取消掉。當然,該支持現在是折中的。這是因為,沒有任何人知道該更新,而且在提交過程中存在潛在的沖突。如果您刪除了一個項目并且該項目資源的Watch/Edit首選項設置沒有被啟用,那么CVS服務器將不會被通知,并且CVS服務器會繼續向外報告您正在對這些資源進行編輯。如果您的小組計劃使用Watch/Edit支持,那么明智的做法是小組中所有人都啟用被標注為Configure projects to use Watch/Edit on checkout的CVS Watch/Edit首選項設置。
5.4.11 恢復被刪除的文件
有時候,在文件被刪除并且更改被提交給CVS后,您可能需要恢復所刪除的文件。幸運的是,CVS不會將所刪除的文件從該文件所在的資源庫中移除。您可以使用Team | Restore from Repository操作來恢復所刪除的文件。如果被刪除的文件在資源庫中存在,那么您將看到一個對話框。在該對話框中,您可以選擇所要恢復的文件的具體修訂版(見圖5-11)。而文件的最新修訂版則是一個對所刪除文件的引用。這是因為文件刪除是一個CVS修訂操作。

圖5-11 顯示可恢復的被刪除文件的Restore from Repository對話框
當一個文件被恢復到工作空間中的時候,該文件被看作是一個新文件。在提交該文件之前或提交該文件時,必須將該新文件添加到版本控制中。
5.4.12 其他CVS用戶界面元素
1. Checkout向導
在New wizard對話框中獲得的是CVS向導中的檢出項目。通常,您會使用CVS Repositories視圖來檢出項目。但是,有些CVS資源庫是不允許被瀏覽的。在這種情況下,檢出向導可能就比較有用。但是在這種情況下,您必須預先知道該項目的名稱。
2. CVS備忘單
若要打開Cheat Sheet Selection對話框,則選擇Help | Cheat Sheets…命令。對于CVS任務來說,備忘單用來為分支和合并操作提供幫助。