兩種在 Rational Team Concert 中融合不同步程式碼的方法

myattitude發表於2009-12-04

轉自:http://www.ibm.com/developerworks/cn/rational/r-cn-rtccodesync/index.html

軟體開發過程中,由於軟體越來越複雜,開發規模越來越大,不可避免地出現多個軟體工程師修改同一檔案的現象。這就直接導致了軟體工程師開發環境上的程式碼與伺服器上的程式碼不同步的問題。在這種情況下,軟體工程師必須將自己的修改融合伺服器上最新的程式碼後,再上傳到伺服器上。

Rational Team Concert(RTC)是一個功能強大的軟體生命週期管理工具,它的原始碼控制管理模組使用簡單、靈活。本文主要介紹兩種在 RTC 中如何將不同步的程式碼進行融合的方法,並對這兩種方法進行了比較,提出它們各自的適用情形。本文適用於所有使用 RTC 進行軟體開發的工程師,幫助他們更加了解 RTC 的原始碼控制功能,以期提高他們的工作效率。

Rational Team Concert(RTC)是 IBM 基於靈活、可擴充套件的 Jazz 平臺上推出的一個集軟體生命週期各階段所需管理功能為一體的工具,功能強大、使用方便,且易於定製。它提供基於 Eclipse、Microsoft Visual Studio 和網頁瀏覽器的三種客戶端。RTC 功能之強大,是目前市場上少有的,它可以為軟體架構師提供軟體需求和架構設計管理功能;為專案經理提供軟體規劃,專案管理,報表功能;為 build 團隊提供軟體版本構建的管理功能;測試團隊提供簡單快捷的測試管理工具;為開發團隊提供靈活易用的開發環境和豐富的原始碼控制功能。

RTC 的原始碼控制模組以元件來管理原始碼、文件和其他附件,類似於其他原始碼管理工具中的分支,它由多個元件組成;元件,則是原始碼、文件和其他附件的集合,它們之間的關係如圖 1 所示。開發人員可以使用 RTC 進行軟體開發、原始碼共享、更新和同步等操作。本文將以 RTC 的 Eclipse 客戶端為例,介紹如何使用 RTC 的原始碼控制功能融合不同步程式碼。


圖 1.RTC 原始碼控制管理層次圖
圖 1.RTC 原始碼控制管理層次圖

在 Rational Team Concert 中如何發現程式碼不同步

在 RTC 中,提交一份程式碼需要如下步驟:建立一個變更集 , 將在本地工作區修改過的程式碼新增進變更集中,然後將變更集檢入到使用者在程式碼伺服器上的儲存庫工作區,在該工作區上的程式碼只對使用者本身可見,對於其他使用者是不可見的。最後,將變更集交付到程式碼伺服器上,這些修改過的程式碼才是真正地進行了釋出,其他使用者才可以看見它們。

RTC 有一種程式碼控制檢視叫暫掛的變更。在該檢視裡,使用者可以看到自己工作區中的程式碼跟程式碼伺服器上的程式碼的差異。這些差異程式碼在該檢視中被分為三種子集 : 未解決傳出傳入。其中,未解決子集包含了使用者在本地工作區中做了修改,但並未進行檢入操作的程式碼;傳出子集包含了使用者在本地工作區中做了修改,並已經檢入到使用者在程式碼伺服器上的儲存庫工作區中,但是並未最終的交付的程式碼;而檢入子集則是包含了其他使用者已經修改,並進行檢入交付的程式碼。同其他的程式碼控制工具相比,這種以集合的方式顯示程式碼差異,十分直觀、清晰。並且暫掛的變更檢視是實時重新整理的,一旦團隊裡的其他成員更新了伺服器上的程式碼,傳入集合會即時更新,這種無延時的資訊傳遞,將大大提高團隊協作效率。

如果存在某些程式碼檔案,既在未解決檢入集中,又在傳入集中,則該使用者本地工作區的程式碼跟程式碼伺服器上的程式碼出現了潛在衝突。在 RTC 中,潛在程式碼衝突用圖示 潛在程式碼衝突用圖示 表示,值得注意的是,如果潛在衝突程式碼還未進行檢入操作,則該圖示不會出現在暫掛的變更檢視上,它只會出現在包資源管理器檢視上衝突檔案圖示的左邊,如圖所示:


圖 2. 未檢入的衝突程式碼
圖 2. 未檢入的衝突程式碼

如果潛在衝突程式碼已經被檢入到使用者在伺服器上的儲存庫工作區上,則在暫掛的變更包資源管理器這兩個檢視上都可以看到潛在衝突檔案及其圖示。作者建議在暫掛的變更檢視上檢視衝突的檔案更為直觀。在該檢視下,點選傳出集合中的一個潛在衝突檔案,傳入集合中的相應檔案會高亮顯示,反之亦然。暫掛的變更檢視下,已檢入的潛在程式碼衝突如圖所示:


圖 3. 已檢入的衝突程式碼
圖 3. 已檢入的衝突程式碼 

如何使用 Rational Team Concert 進行程式碼融合

當軟體工程師發現程式碼不同步時,應該如何使用 RTC 同步呢?RTC 提供了兩種方式融合不同步程式碼。一種是傳統的合併方法,另一種是獨特的打補丁方法。

傳統的程式碼“合併”方法

和所有的程式碼管理工具一樣,RTC 提供的傳統合併方法也分為自動合併手動合併功能。其中,自動合併功能只能合併非衝突性的變更,即變更是簡單的非同一行內的新增或者刪除程式碼。如果變更中含有衝突性變更,則無法使用自動合併功能。所以,在大多數情況下,使用者還是需要使用手動合併功能。下面介紹一下如何手動合併衝突性程式碼。

  1. 接受其他使用者的變更集

在進行程式碼合併之前,使用者需要先接受其他使用者的變更集。具體操作是,右鍵點選其他使用者的變更集,在彈出的選單中選擇接受項,如圖 4 所示。


圖 4. 接受其他使用者的變更集
圖 4. 接受其他使用者的變更集

如果此時,你的本地工作區中尚有未檢入的變更,RTC 會出現如圖 5 所示的提示,要求使用者選擇後續動作。檢入並接受表示先檢入使用者當前的變更,再接受其他使用者的變更;接受則是在不檢入使用者當前變更的情況下,接受其他使用者的變更,此選項不會導致其他使用者的變更直接覆蓋掉自己本地工作區上的變更。點選接受按鈕,當 RTC 在執行接受動作時,如果發現所接受的變更集裡有檔案已經在本地被當前使用者修改過,則此變更集跟本地工作區的程式碼具有潛在性的衝突,會彈出如圖 6 所示的對話方塊,詢問使用者是否需要 RTC 自動解決此潛在性衝突。使用者可以點選自動解決讓 RTC 先幫你自動合併程式碼。


圖 5. 未檢入的變更提示
圖 5. 未檢入的變更提示

圖 6. 自動解決衝突
圖 6. 自動解決衝突

  1. 手動合併衝突性變更

如果變更中存在衝突性的變更,則使用者需要進行手動合併。如何進行手動合併呢?RTC 使用 Eclipse 的比較編輯器來實現使用者手動處理衝突程式碼的功能,將比較編輯器整合於 IDE 環境,能夠做到實時編譯所做的修改,即時知道所做修改是否帶來編譯衝突,提高工作效率。使用者接受了其他使用者的變更後,會在暫掛的變更檢視中的未解決子集中看見需合併圖示 需合併圖示,所有的衝突檔案邊均有此圖示。右鍵點選該檔案,在彈出的選單中選擇在比較編輯器中開啟,如圖 7 所示。


圖 7. 在比較編輯器中開啟
圖 7. 在比較編輯器中開啟

此動作將會把比較編輯器開啟,如圖 8 所示。比較編輯器的上部分是 Java 結構比較,顯示了 Java 結構上變數和函式等成員的衝突,下部分則是 Java 原始碼比較,顯示了具體的 Java 程式碼衝突。左下部分是使用者本地工作區上該檔案的版本,右下部分則是該檔案在程式碼伺服器上的版本。雙擊結構上的衝突,編輯器的下部分會自動跳轉到對應的 Java 程式碼衝突。使用者可以在左邊的區域編輯該檔案,作為最終合併的結果。如果需要將伺服器上的某些程式碼覆蓋本地的程式碼,則選中該段衝突程式碼,點選 Java 原始碼比較視窗右上角的 將右邊的程式碼複製到左邊 按鈕,將右邊的程式碼複製到左邊。


圖 8. 在比較編輯器中合併程式碼
圖 8. 在比較編輯器中合併程式碼
檢視大圖

  1. 確認合併結果,解決衝突

在比較編輯器中根據實際情況合併完程式碼之後,點選儲存按鈕,儲存合併結果。然後點選比較編輯器右上角的按已合併進行解決按鈕,讓衝突按照使用者手動合併的結果解決程式碼衝突。此時,RTC 會彈出一個對話方塊,跟使用者確認是否要按合併的結果解決衝突,如圖 9 所示,點選確定按鈕。RTC 會將手動合併的結果自動加到未解決子集中,以便使用者將此變更交付到程式碼伺服器上。


圖 9. 確認按已合併的結果解決衝突
圖 9. 確認按已合併的結果解決衝突

使用打“補丁”方法進行程式碼融合

相較於其他傳統原始碼控制工具,補丁是 RTC 特有的東西,它是一種可儲存的變更集。補丁反映了當前使用者本地工作區中的某個工程程式碼與伺服器上工程程式碼的差異,它可以以“*.patch”為名的檔案形式儲存在儲存介質上,以便以後可以被重新應用到程式碼工程上,實現程式碼融合。這種便於儲存變更集的補丁使得團隊內部的程式碼共享和同步更新更加便捷、靈活,突出體現了 RTC 在團隊協作管理方面的作用。下面就介紹一下如何使用補丁進行程式碼融合。

  1. 將本地變更生成“補丁”

當程式碼不同步時,使用者可以建立一個補丁,將本地工作區上所有不同步程式碼儲存起來。具體操作為:選擇一個或多個程式碼檔案(這些檔案既可以在未解決集合中,也可以在傳出集合中),右鍵點選程式碼檔案,在彈出的選單中選擇新建 -> 補丁…,如圖 10 所示:


圖 10. 選擇檔案生成補丁
圖 10. 選擇檔案生成補丁

使用者在生成補丁時可以選擇將補丁儲存在本地儲存器上,也可以選擇將補丁暫時貼上在剪貼簿上,如圖 11、12 所示。將補丁儲存在本地儲存空間上時,使用者需要提供儲存路徑和補丁的檔名。而將補丁暫時貼上在剪貼簿上是一個比較方便,快速的動作,使用者只需要按下“確定”按鈕,補丁就會被自動快取在系統剪貼簿上。值得注意的是,放置在剪貼簿上補丁需要儘快被應用到使用者本地工作區上,以防補丁被覆蓋或者丟失。


圖 11. 永久性儲存補丁
圖 11. 永久性儲存補丁

圖 12. 暫時性儲存補丁
圖 12. 暫時性儲存補丁

  1. 撤銷本地變更,接受其他的使用者變更集

由於本地變更已經以補丁的方式被儲存下來了,所以在接受其他使用者的變更集之前,使用者可以放心地撤銷自己本地工作區上的變更,在無衝突的狀態下接受其他使用者的變更集

如果變更並未被檢入,即存在於未解決集合中,則右鍵點選該衝突檔案,在彈出的選單中選擇撤銷,撤銷檔案變更,如圖 13 所示。此撤銷動作將撤銷掉所有的變更,並且不可恢復,所以在未解決集合上執行“撤銷”動作之前,請確認已將變更生成補丁並儲存。


圖 13. 撤銷檔案變更
圖 13. 撤銷檔案變更

如果變更已經被檢入,即存在於傳出集合中,則右鍵點選變更集,在彈出的選單中選擇廢棄項,如圖 14 所示。此廢棄動作亦為不可恢復的,所以請先確認是否已將變更集生成補丁,並儲存下來。


圖 14. 廢棄檔案變更
圖 14. 廢棄檔案變更

在放棄掉自己本地的變更之後,使用者便可在無衝突情況下接受其他使用者已經交付的變更集,具體方法,前面已有詳述,這裡不再重複。

  1. 給程式碼打“補丁”

接下去,我們需要將剛才生成的補丁,重新打回程式碼工程上,實現程式碼融合。在 RTC 選單欄上選擇專案 -> 應用補丁…,在彈出的視窗中選定先前建立的補丁,單擊完成按鈕,匯入補丁。匯入成功後,會有如圖 15 所示的提示,RTC 已經將補丁新增到暫掛的變更檢視中的“暫掛的補丁”節點下,如圖 16 所示。


圖 15. 已將補丁新增到暫掛的變更
圖 15. 已將補丁新增到暫掛的變更

圖 16. 暫掛的補丁
圖 16. 暫掛的補丁

右鍵點選該補丁,在彈出的選單中選擇合併到工作空間…項。RTC 將自動把這個補丁打到專案上,即實現自動合併功能。如果有些不能自動解決的,則參照前面所述方法手動合併這些變更。

記住,請及時的將修改的程式碼檢入到伺服器上,避免產生過多的衝突,給程式碼融合帶來很大的困難。

傳統的“合併”方法與新穎的打“補丁”方法比較

這兩種方法都提供一定的自動融合不同步程式碼功能,同時也提供了手動融合以解決程式碼衝突。但是最主要的區別是,打補丁方法,會生成變更補丁,該補丁可以作為一種程式碼備份。當融合程式碼時,有大量的程式碼衝突存在、融合難度比較大時,建議使用打補丁的方法。因為使用該方法,你會對你的變更做備份,它允許你在發現融合錯誤後,撤銷一切,重新應用補丁。此外,補丁還可以共享給其他使用者,其他使用者可以將補丁打到自己本地的工程上,從而實現變更的傳遞。

總結

本文介紹了兩種使用 RTC 原始碼控制模組融合不同步程式碼的方法,這兩種方法簡便靈活,可以大大提高軟體工程師的工作效率。RTC 原始碼控制模組功能強大、使用方便,結合 RTC 的其他管理模組,可以提高整個軟體團隊的工作效率,相信 RTC 必將成為一個劃時代的軟體週期管理工具。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14780914/viewspace-621621/,如需轉載,請註明出處,否則將追究法律責任。

相關文章