使用Eclipse平臺共享代碼

[轉貼]使用Eclipse平臺共享代碼
已發表: 2004-4-20 上午11:09
  回覆此主題 回覆

Eclipse 如何使用源代碼版本控制
級別:中級


Pawel Leszek([email protected]
獨立顧問
2003 年 8 月

本文概述了 Eclipse 平臺如何支持軟件項目中的源代碼版本控制。首先,我們將簡要討論一下團隊代碼開發的思想,然後研究 Eclipse 如何使用 CVS 代碼資源庫。我們還將研究一些源代碼管理軟件工具,可以通過 Eclipse 插件擴展來支持這些工具。
在團隊項目中共享源代碼
現今的大多數應用程序是由多人組成的團隊開發的。即使只涉及幾個開發人員的小項目,也需要對源代碼的更改進行嚴格控制。這就是源代碼管理軟件的任務。源代碼版本控制軟件必須支持兩個核心功能:

提供一種方法,能夠協調對源代碼的更改,並能集成這些更改
團隊所提交工作的歷史記錄
當團隊成員完成新的工作時,通過將這些更改提交到資源庫來共享他們的工作。類似地,當他們希望獲得最新可用的工作成果時,就可以根據資源庫中的更改,更新自己的本地工作空間。這意味着項目資源庫會因團隊成員提交新工作成果而經常發生更改。換句話說,資源庫應該表示項目的當前狀態。任何時候,團隊成員都要能夠根據資源庫更新自己的工作空間,並確信它們是最新的。

維護歷史記錄也很重要,那樣就可以將當前工作與先前版本進行比較,如有必要,還可以回覆到先前版本。協調團隊的工作,以便只存在唯一的當前項目狀態定義,以及包含團隊已集成的工作,這些對於管理版本控制也是十分必要的。這種協調有可能是最難實現的目標。

最理想的模型是:團隊的任何成員都可以對自己有權訪問的任何資源進行更改。因爲兩個團隊成員可以提交對同一資源的更改,所以有可能發生衝突,必須解決這種衝突。這種模型假定衝突具有唯一性。但遺憾的是,沒有任何源代碼是孤立地存在的;通常它包含與其它資源隱式或顯式的相關性。源代碼引用了在其它源代碼資源中描述的構件。但源代碼管理軟件的工作就到此爲止了,因爲它並不能取代項目管理。項目管理者必須履行其職責:協調其它成員的工作以及負責進度、項目階段和發佈日期。此外,源代碼管理也不能替代開發人員之間的交流。

Eclipse 平臺如何支持代碼管理
Eclipse 平臺提供了作爲團隊在軟件項目中共享代碼和工作的能力。Eclipse 廣泛地支持各種代碼管理解決方案,這要歸功於它的插件體系結構(不過,現已推出了對 CVS 的支持)。Eclipse 平臺體系結構的重點在於工作空間。工作空間維護構建和測試軟件項目所需的一切。它包含對象(源代碼和資源)。它還保存了用於項目、IDE 和插件的配置設置。工作空間是在開發人員的機器上本地進行維護的,而團隊通過外部資源庫進行協作,不同開發人員的代碼在資源庫進行彙集。可以經由因特網通過“客戶機-服務器”體系結構訪問資源庫。

Eclipse 平臺提供了對於直接從工作空間進行團隊開發操作的支持。這種支持允許開發人員併發地與幾個獨立的資源庫以及不同版本的代碼或項目進行交互。工作空間中的資源允許團隊支持組件處理版本和配置管理問題。當然,單個工作空間可以同時訪問不同類型的資源庫。Eclipse 平臺並沒有提供它自己的代碼管理解決方案;它總是依靠外部系統。Eclipse 平臺只對一個(但也是最流行的一個)源代碼管理系統提供內置支持:併發版本控制系統(Concurrent Versions System,CVS)。對第三方代碼管理應用程序的支持一節中描述了使用第三方插件支持其它資源庫。

CVS 是什麼?
CVS 誕生於 1986 年,當時作爲一組 shell 腳本而出現,但它現在已經發展成了最流行的針對軟件開發人員的源代碼版本管理解決方案。CVS 是用於代碼版本管理的開放源碼的客戶機/服務器解決方案,它可用於各種平臺,包括 Linux 和 Windows NT/2000/XP。請參閱本文末尾的參考資料,其中有 CVS 客戶機、服務器和源代碼的下載鏈接。

通常,CVS 的主要功能是記錄源文件的歷史。當一組開發人員從事同一個項目時,CVS 將他們彼此隔離開來。每個開發人員都在他/她自己的目錄中獨立工作,然後使用 CVS 資源庫(不時地)合併工作結果。

Eclipse 擁有與 Eclipse 平臺 IDE 緊密集成的內置 CVS 客戶機,它是作爲一個單獨透視圖(CVS Repository Exploring 透視圖)而實現的,用於與 CVS 的交互。用於 CVS 的通用 Eclipse 設置(General Eclipse settings for CVS)位於 Window -> Preferences window -> Team 下。在切換到 CVS Repository Exploring 透視圖之後,就可以使用所有 CVS 操作了(轉至 Window -> Open Perspective -> Other -> CVS Repository Exploring 菜單 — 請參閱圖 1 和圖 2)。

圖 1. 切換到 CVS Repository Exploring 透視圖
eclipse2.gif

首先設置資源庫的位置,它將定義用於選定 CVS 服務器/資源庫的連接參數。請確保使用 SSH 隧道(extssh)。

圖 2. 瀏覽 CVS Repository Exploring 透視圖中的 CVS 資源庫
eclipse10.gif

Eclipse/CVS 的源代碼工作流
在 CVS 團隊協作模型中,團隊成員彼此獨立地在他們各自的工作臺上完成自己的所有工作。最後,他們希望共享其工作。他們通過 CVS 資源庫實現這一點。CVS 使用分支(branch)模型來支持彼此獨立而又高度相互依賴的多個工作流程(course of work)。這些分支是開發團隊用來共享和集成正在進行中的工作的地方。可以認爲分支是一個共享的工作臺,當團隊成員對源代碼進行更改時就更新這個工作臺。這個模型允許從事 CVS 團隊項目的每個開發人員在進行更改時與其他成員共享其工作,以及在項目進展期間訪問其他成員的工作。

一個稱爲 HEAD 的特殊分支用來表示資源庫中的主要工作流程(HEAD 通常被稱爲主幹)。當團隊成員將資源提交給該分支時,會影響這些相關性。確保相關性的完整性是很重要的,因爲該分支表示了當前項目的狀態。當然,任何時候,團隊成員都可以使用該分支的內容作爲新工作的基礎。

那些規則不僅適用於 CVS:無論使用哪種版本控制軟件,團隊項目中都有一些用於源代碼管理的常見步驟。下面是一個使用 Eclipse 內置的 CVS 支持的示例工作流:

1. 啓動新的團隊項目
每個新的空 Eclipse 項目都可以通過 CVS(或受支持的任何其它源代碼管理系統)進行共享。開發人員也可以通過將其現有的代碼遷移到資源庫來共享它。要進行共享,單擊項目主文件夾,在顯示的上下文菜單中使用 Team -> Share Project 選項,如圖 3 所示。

圖 3. 使用 CVS 資源庫共享本地項目
eclipse3.gif

另一個選項是通過從選定的 CVS 資源庫分支導入代碼來創建新的工作臺項目。只要選擇適當分支(或 HEAD),然後選擇從 CVS Repository Exploring 透視圖中的上下文菜單中選擇“Checkout As Project”選項,如圖 4 所示。

圖 4. 從現有的 CVS 資源庫創建新項目
eclipse1.gif

2. 使用代碼並進行更改
開發人員通過 Eclipse 工作臺在本地使用代碼,包括的工作有創建新資源、修改現有資源、編寫註釋,並在他們使用後在本地保存這些內容。

3. 使本地更改與 CVS 資源庫同步
如果一個項目開發人員準備提交他/她的工作,那麼首先要執行更新操作。這會針對引入的更改覈對資源庫,並將這些更改添加到該開發人員的本地工作臺。這樣確保了開發人員知道這些更改可能會影響他/她將要提交的工作的完整性。使用項目上下文菜單中的 Compare With... 選項將本地版本與資源庫中存儲的代碼進行比較(請參閱圖 5)。

圖 5. 比較本地版本與資源庫中的版本
eclipse7.gif

下一步是解決最後出現的任何衝突,並設法再次編譯代碼。如果一切正常,那麼從項目上下文菜單使用 Team -> Commit... 選項執行提交操作,如圖 6 所示。這會使所有更改都集成到資源庫中。

圖 6. 將更改提交到遠程資源庫
eclipse6.gif

4. 管理資源庫
CVS 允許開發人員將更改隔離在開發的某些獨立路徑之內,這些路徑稱爲分支。當一個開發人員更改某個分支上的文件時,這種更改不會出現在主幹或其它分支上。那些分支被命名爲子版本(subversion)或代碼分叉(code fork)。稍後,由合併操作將更改從一個分支遷移到另一個分支(或主幹)。然後提交這些修訂。這樣就有效地將更改複製到了另一個分支上。使用項目上下文菜單的 Team -> Branch... 選項,Eclipse 使開發分支之間的遷移變得容易。

當然,當開發團隊維護大型資源庫時,有必要控制項目內的提交和合並操作。Eclipse/CVS 集成提供了一種特殊的視圖:CVS Repository History(請參閱圖 7)。它給出了關於團隊成員在資源庫中所執行更改的快速預覽。

圖 7. 在 CVS Resource History 窗口中查看帶註釋的修訂歷史記錄
eclipse9.gif

Eclipse 平臺提供了幾個支持代碼管理的實用程序。最有用的是補丁功能。它將出自兩個來源(譬如本地工作臺和資源庫)的代碼進行比較,然後創建一個包含代碼差異的類似 UNIX 的補丁文件(請參閱圖 8)。可以將該文件發送給開發人員以將源代碼升級到最新版本。

圖 8. 創建用於源代碼分發的補丁
eclipse8.gif

5. 斷開項目與 CVS 的連接
當項目開發已經結束,並且團隊希望凍結源代碼時,可以從 HEAD 資源庫刪除該項目的最終版本。斷開項目與 CVS 的連接將在該項目及其資源上禁用資源庫操作,並刪除與該項目相關聯的 CVS 信息(這一操作是可選的)。

可以通過項目上下文菜單中的 Team -> Disconnect 選項執行斷開連接操作。通過選擇這個選項,會打開 Confirm Disconnect from CVS 對話框。在將該項目與資源庫的連接斷開之後,該團隊必須確定如何處理 CVS 信息。第一個選項是“Delete the CVS meta information”;它將禁用 CVS 團隊菜單操作並從文件系統中刪除 CVS 文件夾及其內容。第二個選項是“Do not delete the CVS meta information”;它將禁用 CVS 團隊菜單操作,但保留 CVS 元信息。

對第三方代碼管理應用程序的支持
CVS 有幾個重要的限制:它不能確定單個文件或整個文件集範圍內同時進行的更改,它也不能檢測文件之間的邏輯衝突。其衝突概念純粹是文本意義上的,當對於同一基本文件的兩個更改時間上非常非常接近,從而使合併命令受到干擾時,就會發生衝突。CVS 也不能提供任何類似於消息傳遞這樣的交互式協作工具。幸運的是,CVS 並不是 Eclipse 平臺所支持的唯一的源代碼管理軟件。開發人員可以通過插件擴展 Eclipse 平臺的功能,而且目前(到 2003 年 3 月 4 日爲止)已有 16 個可用於團隊開發軟件的插件。所有插件都是由 Eclipse 社區或商業軟件供應商創建的。這些插件中的大多數添加了對第三方、商業源代碼管理系統的支持。最有價值的插件是那些支持流行的企業代碼管理系統(如 Merant PVCS 和 Rational ClearCase)的插件。例如,CVS-SSH2 插件允許通過 SSH2 會話訪問 CVS,而 Microsoft Visual SourceSafe(VSS)團隊提供程序插件添加了對 MS VSS 產品的支持(也可以在諸如 Linux 這樣的非 Windows 平臺上使用)。

但是,我本人所偏愛的插件是 Koi(請參閱參考資料以獲取鏈接)。儘管它並非嚴格用於源代碼控制,但這個創新的工具給協作開發注入了許多新的活力。其當前版本支持工作臺到工作臺的消息傳遞、共享標記、衝突更改通知、共享日曆和事件通知。Koi 將 XML-RPC 用作其客戶機-服務器體系結構中的通信模型。客戶機是與“協作服務器”通信的單個 Eclipse 平臺實例,而協作服務器也是一個 Eclipse 插件。Koi 使用以 JDBC 訪問的關係數據庫作爲數據存儲。可在參考資料中找到指向完整的、經過分類的 Eclipse 插件註冊表的鏈接。

參考資料

請參加 eclipse.org 上的 Eclipse 平臺社區。Eclipse 平臺源代碼遵循 Common Public License。Eclipse.org 還有一個 Eclipse 項目的術語和描述詞彙表,以及技術文章和新聞組。Eclipse 平臺白皮書(可在 Eclipse.org 主頁獲取)詳細描述了 Eclipse 的主要組件和功能。


從 eclipse.org 下載 KOI 插件。


查看 Eclipse 插件的完整的、經過分類的註冊表。


從 CVS 主頁或 LORIA 站點下載 CVS 客戶機、服務器和源代碼。


請參閱 developerWorks 文章“Working the Eclipse Platform”,以瞭解關於 Eclipse 平臺的背景知識。


請參閱 developerWorks 文章“Getting started with the Eclipse Platform”,這篇文章介紹了用 Eclipse 平臺以及使用 Eclipse 插件編輯、編譯和調試應用程序。


請參閱 developerWorks 文章“開發 Eclipse 插件”,這篇文章介紹瞭如何開發 Eclipse 插件。


從 developerWorks 的這些文章中獲取關於 Eclipse 的更多信息:


在 developerWorks 開放源碼項目專區查找更多有關 Eclipse 和開放源碼參考資料。



關於作者
Pawel Leszek 是 Studio B 的一位作家,他是一位專長於 Linux/Win/Mac OS 系統體系結構和管理的獨立軟件顧問和作家。他具有許多操作系統、編程語言和網絡協議方面的經驗,尤其是 Lotus Domino 和 DB2 方面。Pawel 還在 LinuxWorld 上發表過一系列文章,他是 PC World 波蘭版的 Linux 專欄作家。Pawel 和他的妻子以及可愛的小女兒住在華沙。歡迎提問並提出意見;您可以通過 [email protected] 與 Pawel 聯繫。

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