天天看點

SVN組成trunk,branches and tags

本文主要講解一下SVN組成trunk,branches and tags,主要包括其概念的講解、用法的比較,相信看完本文你肯定有不少收獲,希望本文能教會你更多東西。

在本篇文章中,我将會詳細說明我是如何應用SVNtrunk(樹幹)、branches(分支)和tags(标記)。這種方法同樣被稱為“branchalways”,兩者非常接近。可能我所介紹的并不是最好的方法,但是它會給新手一些解釋說明,告訴他們trunk、branches和tags是什麼,并且該如何去應用它們。

當然,如果本文有些要點需要澄清/确認,亦或者有一些錯誤的觀點,還請你評論,自由發表自己的觀點。

——簡單的對比

SVN的工作機制在某種程度上就像一顆正在生長的樹:

一顆有樹幹和許多分支的樹

分支從樹幹生長出來,并且細的分支從相對較粗的樹幹中長出

一棵樹可以隻有樹幹沒有分支(但是這種情況不會持續很久,随着樹的成長,肯定會有分支啦,^^)

一顆沒有樹幹但是有很多分支的樹看起來更像是地闆上的一捆樹枝

如果樹幹患病了,最終分支也會受到影響,然後整棵樹就會死亡

如果分支患病了,你可以剪掉它,然後其他分支還會生長出來的哦!

如果分支生長太快了,對于樹幹它可能會非常沉重,最後整棵樹會垮塌掉

當你感覺你的樹、樹幹或者是分支看起來很漂亮的時候,你可以給它照張相,這樣就就可以記得它在那時是多麼的贊。

——Trunka

SVN組成Trunka,Trunk是放置穩定代碼的主要環境,就好像一個汽車工廠,負責将成品的汽車零件組裝在一起。

以下内容将告訴你如何使用SVNtrunk:

除非你必須處理一些容易且能迅速解決的BUG,或者你必須添加一些無關邏輯的檔案(比如媒體檔案:圖像,視訊,CSS等等),否則永遠不要在trunk直接做開發

不要因為特殊的需求而去對先前的版本做太大的改變,如何相關的情況都意味着需要建立一個branch(如下所述)

不要送出一些可能破壞trunk的内容,例如從branch合并

如果你在某些時候偶然間破壞了trunk,bringsomecakethenextday(”withgreatresponsibilitiescome…hugecakes”)

——Branches

SVN組成branches,一個branch就是從一個SVN倉庫中的子樹所作的一份普通拷貝。通常情況它的工作類似與UNIX系統上的符号連結,但是你一旦在一個SVNbranch裡修改了一些檔案,并且這些被修改的檔案從拷貝過來的源檔案獨立發展,就不能這麼認為了。當一個branch完成了,并且認為它足夠穩定的時候,它必須合并回它原來的拷貝的地方,也就是說:如果原來是從trunk中拷貝的,就應該回到trunk去,或者合并回它原來拷貝的父級branch。

以下内容将告訴你如何使用SVNbranches:

如果你需要修改你的應用程式,或者為它開發一個新的特性,請從trunk中建立一個新的branch,然後基于這個新的分支進行開發

除非是因為必須從一個branch中建立一個新的子branch,否則新的branch必須從trunk建立

當你建立了一個新branch,你應當立即切換過去。如果你沒有這麼做,那你為什麼要在最初的地方建立這個分支呢?

——Tags

SVN組成Tags。從表面上看,SVNbranches和SVNtags沒有什麼差别,但是從概念上來說,它們有許多差别。其實一個SVNtags就是上文所述的“為這棵樹照張相”:一個trunk或者一個branch修訂版的命名快照。

以下内容将告訴你如何使用SVNtags:

作為一個開發者,永遠不要切換至、取出,或者向一個SVNtag送出任何内容:一個tag好比某種“照片”,并不是實實在在的東西,tags隻可讀,不可寫。

在特殊或者需要特别注意的環境中,如:生産環境(production)、?(staging)、測試環境(testing)等等,隻能從一個修複過的(fixed)tag中checkout和update,永遠不要commit至一個tag。

對于上述提及到的環境,可以建立如下的tags:“production”,“staging”,“testing”等等。你也可以根據軟體版本、項目的成熟程度來命名tag:“1.0.3”,“stable”,“latest”等等。

當trunk已經穩定,并且可以對外釋出,也要相應地重新建立tags,然後再更新相關的環境(production,staging,etc)

——工作流樣例

假設你必須添加了一個特性至一個項目,且這個項目是受版本控制的,你差不多需要完成如下幾個步驟:

使用SVNcheckout或者SVNswitch從這個項目的trunk獲得一個新的工作拷貝(branch)

使用SVN切換至新的branch

完成新特性的開發(當然,要做足夠的測試,包括在開始編碼前)

一旦這個特性完成并且穩定(已送出),并經過你的同僚們确認,切換至trunk

合并你的分支至你的工作拷貝(trunk),并且解決一系列的沖突

重新檢查合并後的代碼

如果可能的話,麻煩你的同僚對你所編寫、更改的代碼進行一次複查(review)

提×××并後的工作拷貝至trunk

如果某些部署需要特殊的環境(生成環境等等),請更新相關的tag至你剛剛送出到trunk的修訂版本,使用SVNupdate部署至相關環境

Tags:svn,翻譯。SVN組成中trunk,branches and tags概念、功能和用法等介紹完畢。請關注本節的其他報道