Thinking in XiaoQiang
          世人皆有悲哀,只有你不明白
          posts - 56,comments - 150,trackbacks - 0
          轉載:http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecshare/index.shtml

          本文概述了 Eclipse 平臺如何支持軟件項目中的源代碼版本控制。首先,我們將簡要討論一下團隊代碼開發(fā)的思想,然后研究 Eclipse 如何使用 CVS 代碼資源庫。我們還將研究一些源代碼管理軟件工具,可以通過 Eclipse 插件擴展來支持這些工具。

          在團隊項目中共享源代碼
          現今的大多數應用程序是由多人組成的團隊開發(fā)的。即使只涉及幾個開發(fā)人員的小項目,也需要對源代碼的更改進行嚴格控制。這就是源代碼管理軟件的任務。源代碼版本控制軟件必須支持兩個核心功能:

          • 提供一種方法,能夠協(xié)調對源代碼的更改,并能集成這些更改
          • 團隊所提交工作的歷史記錄

          當團隊成員完成新的工作時,通過將這些更改提交到資源庫來共享他們的工作。類似地,當他們希望獲得最新可用的工作成果時,就可以根據資源庫中的更改,更新自己的本地工作空間。這意味著項目資源庫會因團隊成員提交新工作成果而經常發(fā)生更改。換句話說,資源庫應該表示項目的當前狀態(tài)。任何時候,團隊成員都要能夠根據資源庫更新自己的工作空間,并確信它們是最新的。

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

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

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

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

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

          通常,CVS 的主要功能是記錄源文件的歷史。當一組開發(fā)人員從事同一個項目時,CVS 將他們彼此隔離開來。每個開發(fā)人員都在他/她自己的目錄中獨立工作,然后使用 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 透視圖
          CVS 資源庫

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

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

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

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

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

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

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

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

          圖 4. 從現有的 CVS 資源庫創(chuàng)建新項目
          新建項目

          2. 使用代碼并進行更改
          開發(fā)人員通過 Eclipse 工作臺在本地使用代碼,包括的工作有創(chuàng)建新資源、修改現有資源、編寫注釋,并在他們使用后在本地保存這些內容。

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

           

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

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

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

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

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

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

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

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

          圖 8. 創(chuàng)建用于源代碼分發(fā)的補丁
          源代碼分發(fā)

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

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

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

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

          參考資料

          關于作者
          Pawel Leszek 是 Studio B 的一位作家,他是一位專長于 Linux/Win/Mac OS 系統(tǒng)體系結構和管理的獨立軟件顧問和作家。他具有許多操作系統(tǒng)、編程語言和網絡協(xié)議方面的經驗,尤其是 Lotus Domino 和 DB2 方面。Pawel 還在 LinuxWorld 上發(fā)表過一系列文章,他是 PC World 波蘭版的 Linux 專欄作家。Pawel 和他的妻子以及可愛的小女兒住在華沙。歡迎提問并提出意見;您可以通過 pawel.leszek@ipgate.pl 與 Pawel 聯(lián)系。

          posted on 2005-10-13 09:26 小強 閱讀(1341) 評論(0)  編輯  收藏 所屬分類: eclipse plugin

          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 时尚| 永康市| 富平县| 苗栗县| 长宁县| 宜春市| 凉山| 清涧县| 孝义市| 台安县| 商都县| 宝坻区| 西吉县| 灵石县| 简阳市| 双城市| 页游| 砀山县| 邯郸县| 霍山县| 苍溪县| 茶陵县| 洱源县| 额敏县| 湾仔区| 本溪市| 福鼎市| 咸宁市| 大冶市| 通海县| 浮山县| 土默特右旗| 东莞市| 聂荣县| 揭西县| 大余县| 霍林郭勒市| 大新县| 浦城县| 金秀| 江陵县|