天天看點

SVN中tag branch trunk用法詳解

本節主要講解一下SVN中tag branch trunk的用法,在SVN中Branch/tag在一個功能選項中,在使用中也往往産生混淆。這裡就向大家簡單介紹一下,歡迎大家能和我一起學習SVN中tag branch trunk的用法。

在實作上,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要比記住一個很大的版本号容易的多。

branches:分枝

SVN中tag branch trunk的用法,首先看一下branches的介紹。當多個人合作,可能有這樣的情況出現:John突然有個想法,跟原先的設計不太一緻,可能是功能的 添加或者日志格式的改進等等,總而言之,這個想法可能需要花一段時間來完成,而這個過程中,John的一些操作可能會影響Sally的工作,John從現 有的狀态單獨出一個project的話,又不能及時得到Sally對已有代碼做的修正,而且獨立出來的話,John的嘗試成功時,跟原來的合并也存在困 難。這時最好的實踐方法是使用branches。John建立一個自己的branch,然後在裡面實驗,必要的時候從Sally的trunk裡取得更新, 或者将自己的階段成果彙集到trunk中。

(svncopySourceURL/trunkDestinationURL/branchName-m"Creatingaprivatebranchofxxxx/trunk.")

trunk:主幹

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

tag:  圖示

在經過了一段時間的開發後,項目到達了一個裡程碑階段,你可能想記錄這一階段的代碼的狀态,那麼你就需要給代碼打上标簽。

(svncpfile:///svnroot/mojavescripts/trunkfile:///svnroot/mojavescripts /tags/mirrorutils_rel_0_0_1-m"tagedmirrorutils_rel_0_0_1")另有一說,無所謂誰對誰錯。

trunk:表示開發時版本存放的目錄,即在開發階段的代碼都送出到該目錄上。

branches:表示釋出的版本存放的目錄,即項目上線時釋出的穩定版本存放在該目錄中。

tags:表示标簽存放的目錄。

在這需要說明下分三個目錄的原因,如果項目分為一期、二期、三期等,那麼一期上線時的穩定版本就應該在一期完成時将代碼copy到branches上,這 樣二期開發的代碼就對一期的代碼沒有影響,如新增的子產品就不會部署到生産環境上。而branches上的穩定的版本就是釋出到生産環境上的代碼,如果使用者 使用的過程中發現有bug,則隻要在branches上修改該bug,修改完bug後再編譯branches上最新的代碼釋出到生産環境即可。tags的 作用是将在branches上修改的bug的代碼合并到trunk上時建立個版本辨別,以後branches上修改的bug代碼再合并到trunk上時就 從tags的version到branches最新的version合并到trunk,以保證前期修改的bug代碼不會再合并。

-------------------------------------------------------------------------------------------

介紹SVN中tag branch trunk用法時,一直以來用svn隻是當作cvs,也從來沒有仔細看過文檔,直到今天用到,才去翻看svnbook文檔,慚愧

需求一:

有一個客戶想對産品做定制,但是我們并不想修改原有的svn中trunk的代碼。

方法:

用svn建立一個新的branches,從這個branche做為一個新的起點來開發

svncopysvn://server/trunksvn://server/branches/ep-m"initep"

Tip:

如果你的svn中以前沒有branches這個的目錄,隻有trunk這個,你可以用

svnmkdirbranches建立個目錄

需求二:

産品開發已經基本完成,并且通過很嚴格的測試,這時候我們就想釋出給客戶使用,釋出我們的1.0版本

svncopysvn://server/trunksvn://server/tags/release-1.0-m"1.0released"咦,這個和branches有什麼差別,好像啥差別也沒有?

是的,branches和tags是一樣的,都是目錄,隻是我們不會對這個release-1.0的tag做修改了,不再送出了,如果送出那麼就是branches

需求三:

有一天,突然在trunk下的core中發現一個緻命的bug,那麼所有的branches一定也一樣了,該怎麼辦?

svn-r148:149mergesvn://server/trunkbranches/ep其中148和149是兩次修改的版本号。SVN中tag branch trunk用法介紹完畢。