SVN tag和branch的選擇及應用

聲明:以下內容完全源於網絡,非本人自創。由於時間已久,無法找到原文出處。現將此文分享,僅爲需要幫助的朋友提供方便,別無它意。如有轉載,敬請尊重原創!

SVN tag和branch的選擇及應用

在SVN中Branch/tag在一個功能選項中,在使用中也往往產生混淆。

在實現上,branch和tag,對於svn都是使用copy實現的,所以他們在默認的權限上和一般的目錄沒有區別。至於何時用tag,何時用branch,完全由人主觀的根據規範和需要來選擇,而不是強制的(比如cvs)。

一般情況下,

tag,是用來做一個milestone的,不管是不是release,都是一個可用的版本。這裏,應該是隻讀的。更多的是一個顯示用的,給人一個可讀(readable)的標記。

branch,是用來做並行開發的,這裏的並行是指和trunk進行比較。

比如,3.0開發完成,這個時候要做一個tag,tag_release_3_0,然後基於這個tag做release,比如安裝程序等。trunk進入3.1的開發,但是3.0發現了bug,那麼就需要基於tag_release_3_0做一個branch,branch_bugfix_3_0,基於這個branch進行bugfix,等到bugfix結束,做一個tag,tag_release_3_0_1,然後,根據需要決定branch_bugfix_3_0是否併入trunk。

對於svn還要注意的一點,就是它是全局版本號,其實這個就是一個tag的標記,所以我們經常可以看到,什麼什麼release,基於xxx項目的2xxxx版本。就是這個意思了。但是,它還明確的給出一個tag的概念,就是因爲這個更加的可讀,畢竟記住tag_release_1_0要比記住一個很大的版本號容易的多。

這只是個說明,你不按說明來辦事也不會怎麼樣,svn照樣工作得很好。

branches:分枝

當多個人合作(Sally和John)時,可能有這樣的情況出現:John突然有個想法,跟原先的設計不太一致,可能是功能的添加或者日誌格式的改進等等,總而言之,這個想法可能需要花一段時間來完成,而這個過程中,John的一些操作可能會影響Sally的工作,John從現有的狀態單獨出一個project的話,又不能及時得到Sally對已有代碼做的修正,而且獨立出來的話,John的嘗試成功時,跟原來的合併也存在困難。這時最好的實踐方法是使用branches。John建立一個自己的branch,然後在裏面實驗,必要的時候從Sally的trunk裏取得更新,或者將自己的階段成果彙集到trunk中。(svn copy SourceURL/trunk \ DestinationURL/branchName \-m "Creating a private branch of xxxx/trunk." )。

trunk:主幹

主幹,一般來說就是開發的主要呆的地方,

tag:

在經過了一段時間的開發後,項目到達了一個里程碑階段,你可能想記錄這一階段的代碼的狀態,那麼你就需要給代碼打上標籤。(svn cpfile:///svnroot/mojavescripts/trunk \file:///svnroot/mojavescripts/tags/mirrorutils_rel_0_0_1 \-m "tagedmirrorutils_rel_0_0_1″)

版本庫佈局

在將你的數據導入到版本庫之前,首先你得考慮如何組織你的數據。如果你使用一種推薦的佈局,你在後面的操作將會更容易許多。

有一些標準的、推薦的方式來組織一個版本庫。大多數人建一個trunk目錄來存放開發的"主線"、一個branches目錄來容納分支副本、以及一個tags目錄來容納標籤複製。如果一個版本庫只存放一個項目,人們通常創建三個這樣的頂層目錄:

/trunk

/branches

/tags

 

如果一個版本庫包含多個項目,人們通常按分支來安排佈局:

 

/trunk/paint

/trunk/calc

/branches/paint

/branches/calc

/tags/paint

/tags/calc

 

……或者按項目:

 

/paint/trunk

/paint/branches

/paint/tags

/calc/trunk

/calc/branches

/calc/tags

 

如果項目不是密切相關,而且每一個是單獨被檢出,那麼按項目佈局是合理的。對於那些你想一次檢出所有項目,或需要將它們打成一個分發包的相關項目,按分支來佈局通常比較好。這種方式你只要檢出一個分支,而且子項目之間的關係也比較清楚。

如果你採用頂層/trunk /tags/branches這種方式,並不意味着你必須複製整個主線爲分支或標籤,而且某些情況下這種結構更具靈活性。

對於不相關的項目,你可能更願意使用不同的版本庫。當你提交時,改變的是整個版本庫的修訂號,而不是項目的。讓兩個不相關的項目共用一個版本庫,會導致修訂號出現較大的跳躍。Subversion和TortoiseSVN項目看起來是在同一個主機地址,但是它們是在完全獨立的版本庫中開發着,並且版本號也不相干。

當然,你完全可以不理會上面提及的通用佈局。你可以自由改變,來滿足你和你團隊的需要。請記住,不管你選擇哪種佈局,它都不是永久的。你可以在隨時重新組織你的版本庫。因爲分支和標籤是普通的目錄,只要你願意,TortoiseSVN可以將它們移動或重命名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章