fbpx

SVN Merge 教學 - 已經用了版本控制系統,你還在手動合併程式碼嗎?

svn-notifier-large

svn 版本控制系統

版本控制系統博大精深,常常一旦使用的方式不正確,就無法發揮版本控制的最大效用。從 CVS, SVN 到 Git,隨著時間的淬鍊,總會出現與進化出更好的版本管理解決辦法。

在協同作業的環境下,程式碼衝突在版本管理中,算是最惱人的事情。對於複雜的版本控制需求,採用 Git Git Flow 會是比較建議的作法。但很抱歉,我們今天要介紹的程式碼合併教學是用 SVN ....... 哈!SVN 全名為 SubVersion,基本的使用方法這裡就不說明了,我們直接介紹分支 (Branch) 與合併 (Merge) 這兩個功能。

建立分支 (Branch)

先 Check Out 一份 SVN 最新的工作複本 (Workcopy),假設我們目前的 SVN 版本號是 5,如下:

svn-merge_1

然後我們需要將主線 (trunk) 的程式建立一個分支 (Branch) 成為一個新的 Release 的標記。下面的範例用 Tortoise SVN 對工作複本 (Workcopy) 中的 trunk 資料夾,按下「右鍵」選取「Branch/tag...」建立分支,方式如下:

圖片 14

接著在「To path:」輸入我們要建立的目的地位置後,按下「OK」即可(記得要輸入 messages),畫面如下:

圖片 16

svn-merge (1)

接下來更新 (update) 一下我們的工作複本 (Workcopy),如下:

svn-merge (2)

合併程式碼 (Merge)

上述完成建立 Branch 之後,假設我們持續在主線 (trunk) 進行開發與 commit 程式碼,目前的版本號 (Reversion) 為 6,然後我們在主線改了一個 Bug 版本號為 7。然後可能是某種原因我們必須將這個版本 7 的修正合併 (Merge) 至前面建立出來的 Branch,那我們可以對上述的 SVN 資料夾 (合併目的) 按右鍵選擇 Merge 功能,如下:

svn-merge_7

 

一般來說合併動作建議在專案的頂層目錄進行,如此以來合併資訊就會統一顯示在頂層,方便管理與追蹤。點選「Merge」後選擇「Merge a range of revisions」 按下「Next」按鈕,如下:

svn-merge_8

接著選擇我們要合併的來源位置,如下:

svn-merge_9

 

我們可以按下 Specific range 後面的 Show log 按鈕選取我們想要合併過來的版本號,如下:

svn-merge_10

由於我們的合併目的地是從 Revision 5 建立的,因此 SVN 會很聰明地顯示只有之後 Commit 的版本可以進行合併,如上圖僅有 #7 可以勾選。選好要合併的版本後按下「Next」,接著請按下「Test merge」進行合併測試,畫面如下:

svn-merge_11

svn-merge_12

如果測試沒問題,接下來就可以玩真的了,直接按下「Merge」按鈕,合併完成畫面如下:

svn-merge (8)

提醒一下,合併動作之前要先 Commit 目前工作複本 (Workcopy) 的程式碼,因此就算合併過程發生衝突,也不會有任損失。若是合併過程中發生程式碼衝突,就必須要手動進行合併。很重要的一點,上述這個動作僅是合併程式碼,最後還是需要 Commit 程式喔,Commit 的時候除了程式變更之外也會額外記錄合併資訊,畫面如下:

svn-merge_14

上面的畫面有一個 mi 的圖示就是合併記錄,統一在專案頂層目錄進行合併工作,就可以幫助我們很快地調閱與管理合併記錄。假設未來我們繼續在主線 Commit 程式,當下次要合併兩個目錄時,就可以看到之前已經合併的版本號,而不會重複合併,畫面如下:

svn-merge_15

自己的程式碼自己救

在協同作業環境中,程式碼的管理相當重要。上述的案例只是說明冰山一角,整個軟體產品週期其實還有很多複雜的過程,利用現有的程式碼版本控制系統來管理程式,都是需要配合目前的工作流程進行調整,希望各位都能建立屬於自己程式碼管理方法。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料