[svn] 分支开发
生活随笔
收集整理的這篇文章主要介紹了
[svn] 分支开发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
參考博客: http://www.cnblogs.com/cxd4321/archive/2012/07/12/2588110.html?
(1)為什么要使用SVN分支開發和主干合并?
目的:在SVN下進行版本升級模式的開發需求: 1、項目目前已經有比較穩定的版本(release_version_1.0),需要在穩定版本上面做程序的升級 2、升級開發時,可能有10個程序員同時在修改程序,且都需要對絕大多數文件做大部分改動 3、惡心的技術經理說:現在需要把數據庫換成hbase,但是沒有更改完畢之前依舊保持mysql不變 4、多人頻繁提交代碼引入了過多的不穩定因素 5、為不同用戶客定制不同的版本目標: 1、在開發過程中需要保證隨時可以切換到指定的版本(1.0/2.0/3.0) 2、最大程度避免程序的肆意修改和較多的沖突 3、程序員間相互的修改不受影響解決方案:在SVN下進行分支開發與主干合并?
(2)SVN標準結構
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、2.0. 其中最新穩定可發布版本是2.0。目前項目針對1.2和2.0版本在做分支升級開發,1.2版本是從1012開始進行升級,2.0版本是1213開始進行升級維護的。?
(3)Trunk、Tags、Branches詳細解讀
① trunk[主干]
任何時候,應該保證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,保護好現場,萬一合并不理想隨時都可以revertC.合并完成后看是否能正確編譯,然后測試驗證,最后將合并后的改動提交到repository?
(4)Branch和Merge具體執行流程
① 創建Branch/Tag
在/trunk/MyProject目錄上右鍵,選擇“分支/標記”,在彈出框中的"ToURL"中填入分支/標記的地址,在這里目標revision選擇HEAD revision。添加log后點擊ok分支/標記便建立了。
②?檢出(Check Out)或者切換(Switch)到分支,在分支中做修改
③ 將trunk中的修改同步到branch
首先,保證此時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
如果你認為你新加的功能已經開發完成了,你可以刪除你的分支。?
轉載于:https://www.cnblogs.com/avivaye/p/5063381.html
總結
以上是生活随笔為你收集整理的[svn] 分支开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【总结】在VirtualBox上面安装M
- 下一篇: EmEditor编辑器正则表达式的优点