SVN分支維護專家在線
本節(jié)講解一下如何進(jìn)行SVN分支維護,前面幾節(jié)我們講了SVN的分支與合并,相信大家應(yīng)該掌握了,下面就SVN分支維護問題和大家討論一下,希望對你有所啟發(fā)。
你一定注意到了Subversion極度的靈活性,因為它用相同的底層機制(目錄拷貝)實現(xiàn)了分支和標(biāo)簽,因為分支和標(biāo)簽是作為普通的文件系統(tǒng)出現(xiàn),會讓人們感到害怕,因為它太靈活了,在這個小節(jié)里,我們會提供安排和管理數(shù)據(jù)的一些建議。
版本庫布局
有一些標(biāo)準(zhǔn)的,推薦的組織版本庫的方式,許多人創(chuàng)建一個trunk目錄來保存開發(fā)的“主線”,一個branches目錄存放分支拷貝,一個tags目錄保存標(biāo)簽拷貝,如果一個版本庫只是存放一個項目,人們會在頂級目錄創(chuàng)建這些目錄:
- /trunk
- /branches
- /tags
- [/pre]如果一個版本庫保存了多個項目,管理員會通過項目來布局(見“規(guī)劃你的版本庫結(jié)構(gòu)”一節(jié)關(guān)于“項目根目錄”):
- /paint/trunk
- /paint/branches
- /paint/tags
- /calc/trunk
- /calc/branches
- /calc/tags
- [/pre]
當(dāng)然,你可以自由的忽略這些通常的布局方式,你可以創(chuàng)建任意的變化,只要是對你和你的項目有益,記住無論你選擇什么,這不會是一種永久的承諾,你可以隨時重新組織你的版本庫。因為分支和標(biāo)簽都是普通的目錄,svnmove命令可以任意的改名和移動它們,從一種布局到另一種大概只是一系列服務(wù)器端的移動,如果你不喜歡版本庫的組織方式,你可以任意修改目錄結(jié)構(gòu)。記住,盡管移動目錄非常容易,你必須體諒你的用戶,你的修改會讓你的用戶感到迷惑,如果一個用戶的擁有一個版本庫目錄的工作拷貝,你的svnmove命令也許會刪除最新的版本的這個路徑,當(dāng)用戶運行svnupdate,會被告知這個工作拷貝引用的路徑已經(jīng)不再存在,用戶需要強制使用svnswitch轉(zhuǎn)到新的位置。下面我們看一下SVN分支維護中數(shù)據(jù)的生命周期。
數(shù)據(jù)的生命周期
另一個Subversion模型的可愛特性是分支和標(biāo)簽可以有有限的生命周期,就像其它的版本化的項目,舉個例子,假定你最終完成了calc項目你的個人分支上的所有工作,在合并了你的所有修改到/calc/trunk后,沒有必要繼續(xù)保留你的私有分支目錄:
- $svndeletehttp://svn.example.com/repos/calc/branches/my-calc-branch\
- -m"Removingobsoletebranchofcalcproject."
- Committedrevision375.
- [/pre]
你的分支已經(jīng)消失了,當(dāng)然不是真的消失了:這個目錄只是在HEAD修訂版本里消失了,如果你使用svncheckout、svnswitch或者svnlist來檢查一個舊的版本,你仍會見到這個舊的分支。
如果瀏覽你刪除的目錄還不足夠,你可以把它找回來,恢復(fù)數(shù)據(jù)對Subversion來說很簡單,如果你希望恢復(fù)一個已經(jīng)刪除的目錄(或文件)到HEAD,僅需要使用svncopy-r來從舊的版本拷貝出來:
- $svncopy-r374http://svn.example.com/repos/calc/branches/my-calc-branch\
- http://svn.example.com/repos/calc/branches/my-calc-branch
- Committedrevision376.[/pre]
在我們的例子里,你的個人分支只有一個相對短的生命周期:你會為修復(fù)一個Bug或?qū)崿F(xiàn)一個小的特性來創(chuàng)建它,當(dāng)任務(wù)完成,分支也該結(jié)束了。在軟件開發(fā)過程中,有兩個“主要的”分支一直存在很長的時間也是很常見的情況,舉個例子,假定我們是發(fā)布一個穩(wěn)定的calc項目的時候了,但我們?nèi)詴枰獛讉€月的時間來修復(fù)Bug,你不希望添加新的特性,但你不希望告訴開發(fā)者停止開發(fā),所以作為替代,你為軟件創(chuàng)建了一個“分支”,這個分支更改不會很多:
- $svncopyhttp://svn.example.com/repos/calc/trunk\
- http://svn.example.com/repos/calc/branches/stable-1.0\
- -m"Creatingstablebranchofcalcproject."
- Committedrevision377.
- [/pre]
而且開發(fā)者可以自由的繼續(xù)添加新的(試驗的)特性到/calc/trunk,你可以宣布這樣一種政策,只有bug修正提交到/calc/branches/stable-1.0,這樣的話,人們繼續(xù)在主干上工作,某個人會選擇在穩(wěn)定分支上做出一些Bug修正,甚至在穩(wěn)定版本發(fā)布之后。你或許會在這個維護分支上工作很長時間—也就是說,你會一直繼續(xù)為客戶提供這個版本的支持。到這里SVN分支維護問題講解完畢不知你掌握了沒有。
【編輯推薦】
- Subversion版本升級兼容性以及合并跟蹤相關(guān)問題報道 上篇
- Subversion版本升級兼容性以及合并跟蹤相關(guān)問題報道 下篇
- 版本控制工具CVS與SVN誰主沉浮
- 獨立服務(wù)器SVNServer安裝大揭秘
- 專家實例講解Apache+SVN權(quán)限管理問題