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任務來說,備忘單用來為分支和合并操作提供幫助。