【23】標(biāo)記
軟件開發(fā)的過程有時是漫長的,但我們的主干、分支達(dá)到一定程度后,我們也許會提交了很多版本,更新很多資源。如果此時我們不適當(dāng)?shù)貙浖鲆粋€“階段的標(biāo)識”,那么在將來的時間我們將很難對某個階段所做的修改有一個明確的記憶。
也許你會說:我們不是有svn log嗎?我們可以查看log啊~。問題是當(dāng)版本更新到一定程度后,svn log的輸出將變得非常多而復(fù)雜,要在幾百個版本中分辨出來那個版本是我們需要的是一件很困難的事。我們期望能夠有一種類似于“里程碑”式的版本來記錄我們在某段時間內(nèi)的所有更新。
標(biāo)記Tag就是基于這種概念而出現(xiàn)的。和分支Branch一樣,在SVN看來他們都只是普通的目錄而已,Branch是動態(tài)變化的,而Tag則像快照一樣一旦留下就不會改變了。
什么時候是Branch?什么時候是Tag?原則如下:
如果你還需要繼續(xù)向目錄提交變更,它就是個分支。如果一旦拷貝后不再提交任何改變哪就是標(biāo)記。實(shí)際上SVN不會強(qiáng)制你不能對名為***tag的目錄進(jìn)行commit操作,這只是通常上約定。即便因?yàn)檎`操作我們也可以輕易的使用update操作回滾到當(dāng)初創(chuàng)建Tag時的快照版本
創(chuàng)建標(biāo)記的方法和分支一摸一樣,都是使用svn copy 命令,你也可以加上-r 版本號來指定創(chuàng)建某個版本的快照
【24】主干、分支與標(biāo)記的配合
在企業(yè)級的應(yīng)用開發(fā)中,通常會遇到新舊版本同時開發(fā)的問題,為了不影響新版本功能的開發(fā),我們通常采用如下的分支策略:
Step 1: 所有的程序員把日常開發(fā)的代碼都提交到主干trunk上,包括每天的新功能,bug修正
Step 2: 當(dāng)開發(fā)進(jìn)行到一個段落后,管理人員認(rèn)為可以釋放版本了。將其拷貝到假設(shè)名為branch/1.0目錄下
Step 3: 測試或QA組的成員對這個“穩(wěn)定”的版本進(jìn)行測試,與此同時開發(fā)人員繼續(xù)在主干上進(jìn)行2.0版本的開發(fā)
Step 4: 當(dāng)測試或QA組完成branch/1.0目錄下軟件的測試后,決定可以發(fā)布了。就將其拷貝到假設(shè)名為tag/1.0的目錄下,此時tag/1.0目錄下的內(nèi)容就是我們要正式發(fā)布的產(chǎn)品了。而且不會對該目錄下的任何資東西進(jìn)行修改了。如果有需要則滾落下一版本的開發(fā)、測試。
Step 5: 發(fā)布成功后,測試或QA組的成員又從trunk目錄下檢出最新的2.0的代碼,拷貝到假設(shè)名為branch/1.1目錄下,重復(fù)上面步驟
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。