[svn] 分支開發

 

參考博客:
http://www.cnblogs.com/cxd4321/archive/2012/07/12/2588110.html

 

(1)爲何要使用SVN分支開發和主幹合併?html

目的:在SVN下進行版本升級模式的開發

需求一、項目目前已經有比較穩定的版本(release_version_1.0),須要在穩定版本上面作程序的升級
2、升級開發時,可能有10個程序員同時在修改程序,且都須要對絕大多數文件作大部分改動
3、噁心的技術經理說:如今須要把數據庫換成hbase,可是沒有更改完畢以前依舊保持mysql不變
4、多人頻繁提交代碼引入了過多的不穩定因素
5、爲不一樣用戶客定製不一樣的版本

目標一、在開發過程當中須要保證隨時能夠切換到指定的版本(1.0/2.0/3.02、最大程度避免程序的肆意修改和較多的衝突
3、程序員間相互的修改不受影響

解決方案:在SVN下進行分支開發與主幹合併

 

(2)SVN標準結構mysql

url_of_repository
    |-trunk
        |-cnblogs
    |-tags
        |-cnblogs_release_version_1.0
        |-cnblogs_release_version_1.2
        |-cnblogs_release_version_2.0
    |-branches
        |-cnblogs_update_version_1.2_20151012
        |-cnblogs_update_version_2.0_20151213


解讀:

從目錄能夠看出,目前有三個版本,分別是1.0、1.二、2.0.
其中最新穩定可發佈版本是2.0。

目前項目針對1.2和2.0版本在作分支升級開發,1.2版本是從1012開始進行升級,2.0版本是1213開始進行升級維護的。

 

(3)Trunk、Tags、Branches詳細解讀程序員

① trunk[主幹]sql

任什麼時候候,應該保證trunk裏面的代碼是最新的穩定版本
當branch裏面修改的代碼通過屢次測試成功經過後,應該把branch裏面的代碼合併到主幹trunk裏

② tags[存儲階段性的發佈版本]數據庫

將某時刻認爲穩定的最新版本做爲一個備份保存在tags目錄下,以便隨時切換到該穩定節點版本
做爲一個里程碑的版本進行存檔
注意:tags下面的版本文件默認是隻讀的(能夠強制修改),但仍是建議不要修改tags下面的任何文件。

經常聽項目經理說:
A.嗯,不錯。這個版本比較穩定,給打個2.0版本極限吧。
B.有沒有搞錯,這個版本這麼多錯誤還敢上線!趕忙給我回退到上一個版本!

相對應的操做是:
A.將當前trunk裏的代碼"複製"一份到tags下面(cnblogs_release_version_2.0),並註明這個版本的更新和修改狀況
B.忽略本次發佈版本(cnblogs_release_version_2.0),將系統回退到上一個經測試驗證後比較穩定的版本(cnblogs_release_version_1.2)

③ branches[分支]併發

一個branch是某個 trunk 的一個拷貝
新建的branch在repository中其實只是一個指向trunk某個revision的軟鏈接而已,並無真的複製文件。

流程:從trunk建立(create)branch,而後在branch上作開發,開發完畢後合併(merge)到trunk中。

項目經理把小李子和小葉子叫過來講:
大家負責的模塊都有不一樣程度的問題,須要修改一下。
可是我不想讓大家在trunk裏面直接修改,大家回頭各自建立一個branch,分別修改完本身的bug再合併到trunk裏面吧

1)一個重要問題:branch和trunk在並行開發的過程當中如何感知對方,避免二者越走越遠,致使最後沒法合併?
解決這一問題的惟一手段是:branch要不停地和trunk保持同步,你要及時地知道trunk都作了什麼修改,這些修改是否會影響你正在開發的新功能,若是須要,你必須及時調整branch的代碼,使之能與trunk「兼容」。

2)那麼如何讓branch和trunk保持同步?合併,從trunk合併到branch,你沒聽錯,是從trunk合併到branch。

關於TortoiseSVN的合併,有幾點須要注意:

A.TortoiseSVN的合併發生在本地,也即你的working copy中,你無需過多擔憂會對repository中的代碼形成影響

B.不論是從trunk合併到branch仍是最終從branch合併回trunk,在每次合併前最好先update,而後將本地的修改先所有commit,保護好現場,萬一合併不理想隨時均可以revert

C.合併完成後看是否能正確編譯,而後測試驗證,最後將合併後的改動提交到repository

 

(4)Branch和Merge具體執行流程測試

① 建立Branch/Tagurl

在/trunk/MyProject目錄上右鍵,選擇「分支/標記」,在彈出框中的"ToURL"中填入分支/標記的地址,
在這裏目標revision選擇HEAD revision。添加log後點擊ok分支/標記便創建了。

② 檢出(Check Out)或者切換(Switch)到分支,在分支中作修改spa

③ 將trunk中的修改同步到branchcode

首先,保證此時trunk中的代碼是最新的,沒有任何衝突。(該Commit的和Update的都已經執行完畢)

"Merge a range of revision" - 將某個分支或主線上提交的多個revision間的變化合併到另一個分支上。

當branch和trunk在獨立、並行地開發時,爲了防止在「錯誤」的道路上越走越遠,branch意識到是時將trunk合併到branch了。

trunk先Update至最新代碼,在
/branches/MyProject上右鍵,選擇Merge選項,選擇"Merge a range of revision"。

在點擊Merge按鈕前你能夠先Testmerge一把,當作功與否,以及merge的詳細信息。

點擊Merge按鈕後trunk所作的修改將同步到branch中。

至此,branch已經徹底和trunk同步,branch和trunk的代碼相處很融洽,沒有任何衝突。

④ 將branch合併回trunk

首先,須要保證此時branches中的代碼是最新的,沒有任何衝突。(該Commit的和Update的都已經執行完畢)

"Reintegrate a branch" - 在分支開發結束後將全部的改動合併回主線。

在/trunk/MyProject上右鍵,選擇「Merge」,在彈出的窗口中,Merge type選擇"Reintegrate a branch"

最後,須要將成功合併後的trunk趕忙commit!

⑤ 刪除branch

若是你認爲你新加的功能已經開發完成了,你能夠刪除你的分支。
相關文章
相關標籤/搜索