本篇目錄
前言
使用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之后,再也不想用其它[源代碼]管理器。