前言
使用svn作爲源碼管理工具已有幾年,但一直都只是使用到了trunk。最近項目中發版本每次都會將一個版本的文件拷貝打包爲rar壓縮文件,下個版本迭代則從新在svn服務端建立新的Repository用於管理。顯然這tag版本脫離了svn的管理,日誌記錄也會發生斷層。
因而最近就查閱了一些文章,結合實際對 trunk、tags、branches 進行體驗操做,有點收穫,怕之後忘了,故作此記錄。
SVN分支管理策略
其中
Trunk:主開發分支,全部最新的代碼都在這裏。
Tags:一個里程碑版本,通常均可保證直接上線(名字:」V1.0」,」V1.1」,」V2.1」,」School_V1.0」,」School_V1.1」…),用於存放發佈的版本。
Hotfix branch:修正bug的分支(名字:」hotfix_V1.x」,」 School_hotfix_V1.x」, 「School_hotfix_V1.x」),從須要修復的tag拉出分支,用於解決已上線版本的bug。
Customize branch:定製化需求的開發分支(名字:」School_Develop」…),用於定製化需求開發一個版本。
VisualSVN Server
服務端採用VisualSVN Server是免費的,而客戶端VisualSvn是收費的,可以使用免費AnkhSvn替代集成至Visual Studio使用。VisualSVN Server的下載地址:https://www.visualsvn.com/server/download/,VisualSVN Server的安裝使用網上有不少文章,此處不作描述。
TortoiseSVN客戶端
Repository的建立
Check out
首先Checkout在服務端repository建立的Test,默認建立了三個空文件夾。
trunk建立新項目MyProject
trunk更新提交更新,迭代版本建立Tag V1.0
提交迭代版本更新。
基於trunk中最新版本建立Tag_V1.0。在/trunk/MyProject目錄上右鍵,依次選擇"TortoiseSVN" -> "Branch/tag...",在彈出窗口的"To path"中填入tag的地址。
提交後在文件夾更新後會在Test\tags文件夾下出現MyPro_V1.0文件夾,tags目錄下的MyPro_V1.0文件夾就是以trunk中指定的版本拷貝的副本作爲版本V1.0進行的封存。
基於Tag的Hotfix Branch
當版本V1.0發佈上線後,出現線上bug後須要修復,則以Tag中MyPro_V1.0建立Hotfix Branch(步驟和建立Tag相似),在Hotfix的分支中修復問題。修復完成後須要將這次的改動Marge(合併)到trunk中同時創Tag_V1.1進行發佈。
提交後在文件夾更新後會在Test\branches文件夾下出現bugfix_by_account文件夾,在此基礎上修復問題並提交。
在/branches/bugfix_by_account目錄上右鍵,依次選擇"TortoiseSVN" ->"Revision graph",在彈出的窗口中能夠看到版本分支圖。
Hotfix Branch改動Marge(合併)到trunk中同時創Tag_V1.1進行發佈
在/trunk/MyProject目錄上右鍵,依次選擇"TortoiseSVN" ->"Merge...",
點Next出現以下窗口,
若是trunk中的版本修改過的文件與Hotfix分支中的修改不重合則不會產生衝突。下圖是trunk進行過版本提交,與Hotfix分支中的修改產生衝突。
點擊 Edit Confict解決衝突。
衝突處理完後點擊Resolved,衝突解決完成本地trunk中已包含Hotfix分支的內容,合併後須要提交至svn服務器。
Hotfix分支修復完成後建立Tag_V1.1與以前trunk建立Tag_V1.0相似。
完成以上動做後的版本分支圖以下。
定製化分支Customize branch
定製化分支使用的方式和以前建立branch方式相似,在此不作贅述。
總結
合併發生在本地working copy,只要你不提交就不會影響到repository。
合併前必定要先update、commit,保證不會out of day,並將本地的修改保存到repository。
使用svn建立的分支都會在指定的文件夾中建立副本,若是是在不一樣的分支文件夾中開發時候須要從新對項目配置(eg:IIS外部主機),也可在trunk中切換分支則不用修改配置,可是svn服務端須要保持可鏈接狀態。
最後說一句用過git以後,不再想用其它[源代碼]管理器。