1. 程式人生 > >svn-新建分支-主幹合併到分支-分支合併到主幹-刪除分支

svn-新建分支-主幹合併到分支-分支合併到主幹-刪除分支

一個大專案在開發中可能會拆分成幾個小專案,分別分去,同時共通的部分再由人做,做完後再統一合併。同時,在開發中,共通的部分修改後,其它人要保持同步。 這種情況反應到SVN的分支/合併功能上,再貼切不過了。 SVN可以為一個版本庫中的內容(主幹)建立一個分支.分支和主幹完全獨立,就相當於把程式碼再複製一份,重新新增到版本庫中。但SVN提供另一個功能,就是把主幹做出的修改合併到分支中,以及把分支修改的內容合併到主幹中。當然,我們也可以把主幹的版本庫的路徑切換到分支上,然後更新,來實現把分支的修改更新到主幹;以及修改分支路徑來同步主幹的修改。但過程複雜,還容易出錯。 SVN 的分支功能還提供一些合併的測試,可以在不改動版本路徑的情況下完成上面的需求。 示例: 1.將一個整專案建一個分支. SVN <wbr>- <wbr>主幹/分支 SVN <wbr>- <wbr>主幹/分支 建立時要注意: 1.當前複製源,即專業術語中的 "主幹(truck)" 2.分支存放的位置. 當然,分支也是在SVN版本庫中. 3.寫上日誌.這個大家應該懂的. 4.是否把主幹的路徑切換到分支.如果勾選了,建立分支後,在主幹裡做出的修改並提交後,更新會提交到分支上。主幹的版本源內容不會變. 這時我們看一下 trunk 目錄的屬性,可以看到它的路徑已經變成: /calc/branches/my-calc-branch 了。
SVN <wbr>- <wbr>主幹/分支 為了避免產生困惑。以及失誤。在建立的時候不要勾上 "切換到分支" 的選項。如果勾上了,我們還是切換回去:

SVN <wbr>- <wbr>主幹/分支

SVN <wbr>- <wbr>主幹/分支 注意: 1.主幹的目錄 2.版本庫源路徑
這時你便可以在 /calc/branches/my-calc-branch 分支上開發新的功能,且不會影響到其他成員開發或維護主幹的內容。 2.合併主幹的變更
也許過了一段時間,原本的 /calc/trunk 主幹可能已經有其他成員陸續修正了一些 Bugs,但這時你的分支 /calc/branches/my-calc-branch 就可以直接套用主幹 ( /calc/trunk ) 的更新,除了避免重複的工作外 ,也可以避免版本的衝突,因為多人改同樣的檔案可能發生衝突。 經常將 開發主幹 ( /calc/trunk ) 的變更透過 svn merge 合併至 分支 ( /calc/branches/my-calc-branch ) 是一個非常好的習慣,這樣才不會讓你脫離主幹(trunk) 過久而導致將分支 ( /calc/branches/my-calc-branch ) 合併回 主幹 ( /calc/trunk ) 時發生許多衝突。
SVN <wbr>- <wbr>主幹/分支


SVN <wbr>- <wbr>主幹/分支 從主幹 ( /calc/trunk ) 合併至分支 ( /calc/branches/my-calc-branch ) 通常選第 1 個,也就是 [Merge a range of revisions] 注意.我們是在分支上使用的 Merge 功能.因為是要在分支上應用主幹的更新.
SVN <wbr>- <wbr>主幹/分支 在 Merge 的視窗有以下注意事項: 1.合併的來源,由於我們打算從主幹 ( /calc/trunk ) 合併至分支 ( /calc/branches/my-calc-branch ),所以合併的來源要選 /calc/trunk 才對! 2.合併的結果會直接與目前「工作目錄」(Working Copy) 做比對,並修改目前工作目錄中的所有檔案。因此建議在做合併之前可以將所有尚未 commit 的檔案先 commit 到版本庫,避免不必要的衝突事件發生。
SVN <wbr>- <wbr>主幹/分支
在正式進行合併(Merge)之前,建議先執行 Test merge 看看是否會發生什麼事! 若無異狀則可直接按下 [Merge] 按鈕進行合併動作,這時從 主幹 ( /calc/trunk ) 分支出來的到目前工作目錄的版本就會做個比較,然後直接套用變更到你現有的檔案、目錄或屬性裡。

SVN <wbr>- <wbr>主幹/分支
在合併之後如果沒有發生衝突,不代表真的沒衝突,所以必須再次對原始碼做出驗證後才能 commit 進版本庫,建議可參考以下流程: 1.將專案進行建置(Build) 2.如果沒問題再對專案進行單元測試(Unit Testing)或手動測試(Manual Testing) 3.如果都沒問題再 commit 目前合併無誤的版本到版本庫! SVN <wbr>- <wbr>主幹/分支 3.合併分支到主幹 最後我們的 my-calc-branch 分支已經將新功能開發完成且測試無誤,所以要將 分支 ( /calc/branches/my-calc-branch ) 的最終版本合併回 主幹 ( /calc/trunk ),這時的手續如下:

SVN <wbr>- <wbr>主幹/分支

SVN <wbr>- <wbr>主幹/分支 從 分支 ( /calc/branches/my-calc-branch ) 合併回 主幹 ( /calc/trunk ) 通常選第 2 個,而特別選擇 [Reintegrate a branch] 這個選項是很重要的,因為這有以下好處: 1.讓 Subversion 能知道 主幹 ( /calc/trunk ) 是從哪個分支、哪些版本合併進來的 2.有效節省 Subversion Repository (SVN儲存庫) 的空間,因為不用重複儲存分支的所有變更資訊 3.可以產生 Revision graph 得知專案開發的分支狀況
SVN <wbr>- <wbr>主幹/分支 一樣可以先 測試合併(Test merge) 再正式進行 合併(Merge)

SVN <wbr>- <wbr>主幹/分支 合併完後再將變更 commit 到版本庫

SVN <wbr>- <wbr>主幹/分支 4.刪除使用完畢的分支 當 分支 ( /calc/branches/my-calc-branch ) 合併回 主幹 ( /calc/trunk ) 並 commit 了之後,該分支就沒用了,該分支如果未來不再更新或繼續開發,Subversion 也不會繼續追蹤這個分支的變更 (因為之前已經 Reintegrate 過了),建議將該分支刪除。

SVN <wbr>- <wbr>主幹/分支

SVN <wbr>- <wbr>主幹/分支

SVN <wbr>- <wbr>主幹/分支