svn 主幹合併

一、  背景    

平時在進行開發時,一般都會有多版本同時進行,包括項目版本、周版本、緊急版本等,當某一個版本具備上線條件後,需要在上一個已發佈的版本基礎上進行發佈,才能夠避免出現版本相互覆蓋,因此往往需要對版本之間代碼進行合併,這裏就和大家探討下如何合併代碼,讓合併代碼質量高以及高效。

二、合併代碼的常規方法

常規的方法是用Beyond Compare 工具來進行手工合併代碼,該工具的最主要作用是對比出有哪些代碼是不相同,然後人爲地判斷出哪些需要合併,哪些不需要合併。因此如果判斷失誤,則合併後的質量未必高;在合併的過程中,因爲是需要人爲識別如何來合併,因此效率自然不會很高.

三、利用SVN合併

Subversion的版本庫是一種文件服務器,但不是一般的文件服務器。Subversion版本庫的特別之處在於,它會記錄每一次改變:每個文件的改變,甚至是目錄樹本身的改變,例如文件和目錄的添加、刪除和重新組織;可見SVN可自動識別出開發者具體修改什麼代碼,在合併時,只要知道SVN版本號,它會自動找出修改過的代碼,然後合併到最終目標文件中。因此使用SVN來合併代碼具有合併質量高以及高效的特點。 SVN的合併有三種類型,如下圖:

第一種類型:合併一個版本範圍
該類型是根據SVN指定的版本號來合併,也是最靈活的一種合併方式,可以是主幹合併到分支,或分支合併到主幹;主要應用場景是把分支或主幹裏面的一部分修改同步到主幹或分支中去;甚至支持不同庫的兩個分支,當然這兩個分支要求是相同的目錄結構。

第二中類型:復興分支
把分支合併到主幹上,這裏會把所有分支的修改,都合併到主幹中,如果只想合併一部分,不合適使用該類型;而且這種類型合併受限的條件比較多,如分支和主幹必須是在同一個庫,本地工作目錄不能夠包含有被修改過的文件等。

第三種類型:合併兩個不同的樹
把兩個分支的差異合併到本地的工作目錄;其實它也可以把分支的代碼同步到主幹中,只需要把合併的from指定爲主幹URLto指定爲分支URL, 而本地工作目錄是主幹。

四、利用SVN合併具體步驟

在上面的三中類型中,最常用最靈活的是第一中類型:“合併一個版本範圍”,也是我用得最多的一種合併類型。下面以這個類型爲例,來介紹合併的整個過程,假設是從分支合併到主幹。對於另外的兩種類型合併都差不多;這裏就不一一介紹了。

1.把主幹check out 到本地,並確保文件更新到最新狀態

2.按照下圖示打開合併對話框:

3.選擇合併類型:

根據合併類型進行選擇,這裏的例子中是選擇第一個類型,然後再點“Next”按鈕。

4.填寫SVN URL和版本號信息

“URL to merge from”下拉框選擇需要合併分支或主幹,在例子中,選擇的是分支v1.0;在“revision range to merge”文本框選擇具體需要合併的SVN版本號,可通過“show log”按鈕查看有哪些版本號。可選擇具體的版本號,也可以選擇一個區間的版本號,如4-7,表示從SVN版本號4-7的全部合併。如選擇區間版本號,需按住shift鍵。輸入各項信息後,再點“next”。

5.合併選項的選擇

在這個步驟中,主要是針對檢索深度、行的結束符、空格選項的合併做設置,這裏選擇默認選項即可。

6.測試合併

在上面步驟中,直接點“test merge”按鈕來測試合併結果。如果有衝突,則會有提示有衝突:

7.開始合併

在步驟6中,直接點擊“merge”按鈕將會開始合併, 如沒有衝突時,合併後的對話框將是下面的截圖:

8.處理衝突

合併後有衝突時,彈出的對話框如下圖,注意此時“resolved”按鈕是灰色:

點“edit conflict”按鈕,將打開SVN的合併對話框,讓開發者進行手工合併:
 

通過手工合併後,合併後的代碼將在下面窗口中顯示,確認合併完畢,點工具欄上的第二個保存圖標進行保存,並關閉當前合併的對話框;回到處理衝突的對話框中,會發現之前“resolved”按鈕是灰色,現在變成可點按鈕:

點“resolved”按鈕,至此,當前的衝突已解決;SVN會繼續合併後面的版本。

9.提交代碼

合併完代碼後,最後別忘記提交代碼,同時要輸入註釋,方便日後追溯。註釋參考格式如下:從[分支或主幹]合併代碼到[主幹或分支],版本號是從[開始的版本號][結束的版本號]

五、注意事項或建議 

1.在使用SVN進行合併時,如何知道哪些版本號是合併過呢?在查看日誌對話框中,已合併過版本號會變成灰色。

2.在修改代碼時,建議遵循最小化修改原則,就是在修改代時,不要隨意增加空格、空行和格式化、甚至包括文件的編碼,有助於方便合併代碼。

3.圖片無法進行自動合併,但可利用SVN自帶的圖片對比工具來對比。

4.建議合併時,使用“test merge”來查看有多少衝突,如果衝突較多,可分多次合併,減少合併的複雜性。

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