我相信初學開發在SVN作為版本管理時,都估計沒可能考慮到如何靈活的運用SVN來管理開發代碼的版本,下面我就摘錄一篇文章來簡單說明SVN里的trunk,branched,tags這個三個文件目錄的用法。
我將會詳細說明我是如何應用SVNtrunk(樹干)、branches(分支)和tags(標記)。這種方法同樣被稱為“branchalways”,兩者非常接近。可能我所介紹的並不是最好的方法,但是它會給新手一些解釋說明,告訴他們trunk、branches和tags是什么,並且該如何去應用它們。
——簡單的對比
SVN的工作機制在某種程度上就像一顆正在生長的樹:
一顆有樹干和許多分支的樹
分支從樹干生長出來,並且細的分支從相對較粗的樹干中長出
一棵樹可以只有樹干沒有分支(但是這種情況不會持續很久,隨着樹的成長,肯定會有分支啦,^^)
一顆沒有樹干但是有很多分支的樹看起來更像是地板上的一捆樹枝
如果樹干患病了,最終分支也會受到影響,然后整棵樹就會死亡
如果分支患病了,你可以剪掉它,然后其他分支還會生長出來的哦!
如果分支生長太快了,對於樹干它可能會非常沉重,最后整棵樹會垮塌掉
當你感覺你的樹、樹干或者是分支看起來很漂亮的時候,你可以給它照張相,這樣就就可以記得它在那時是多么的贊。
——Trunk
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部署至相關環境
- 簡介
- 我們都知道SVN是管理項目源代碼的軟件,可以把我們開發中的各個階段的代碼記錄下來,供我們以后來使用,那么SVN具體的結構你是否知道呢?下面我們來介紹一下它的基本結構
- Trunk、Branches、Tags、作用
- Trunk
- 這是SVN目錄的主分支,表示日常開發中的項目,任何時候Trunk里包含的都是最新的開發代碼。 這里的代碼將會工作到你的下一個主要發布版本。
- Trunk應該只被用來開發將會成為你的下一個重要版本的代碼。
- 幾乎常常人們只使用trunk來存放他們的代碼。發放了一個版本后繼續在其上進行下一版開發。這樣開發是混論的,如果出現大的Bug往往不好恢復到之前版本,因此,增加了一個Branches文件
- Branches
- 常用的Branches分支有好幾種類型,這里列出常用的幾種。
- Release Branches
- 當trunk達到准備發布的階段時(或者你想凍結新特色的添加時),你應該創建一個release branches。
- Bug fix branches
- 分支也可以用於處理trunk或release branches里發現的嚴重的Bug。
- Experimental branches
- 有時你想將某個新技術引進項目。這很好,但是你當然不想賭上你的整個項目。想象一下,你想把你的Web程序從PHP4改為PHP5。你要花多少時間?在這期間你的trunk停止使用?直到你把所有到PHP5的轉換做完
- Tags
- 一般情況下,tag,是用來做一個milestone的,不管是不是release,都是一個可用的版本。這里,應該是只讀的。
- 在SVN中Tag和Branches,在一個選項里面創建時區別不明顯,Tags中存放的也是Trunk的一個副本,只不過是只讀的,不可以修改,權限不同。
- Trunk
- Trunk、Branches、Tags詳細使用
- Trunk
- 文件夾中右鍵,選“Create repository here”
-
- 選擇“Create folder Structure”,然后,瀏覽建好的文件結構
-
- 文件夾中右鍵,選“Create repository here”
- Branches
- Create
- Merge
- Branches To Trunk
- 這種方式用的最多,屬於常用的一種。
- 在Trunk中,選中UI文件夾,右鍵
-
- 如下圖,選擇”merge”
-
- 選擇“Merge a range of revisions”
-
- 選擇要合並的目錄,這里選擇branches中UI文件夾
-
- 合並完成
-
- Trunk To Branches
- Branches To Branches
- Branches To Trunk
- Tags
- 標記同branches類似,同上.
- Trunk
- 意義
- SVN解決了我們數據備份、 版本控制、 數據同步等面對的問題,因而深受很多人喜愛和使用,它是一個不錯的管理知識的軟件工具。
- 我們自己也可以用SVN管理我們的知識。
http://blog.csdn.net/lilongsheng1125/article/details/8742200
http://blog.sina.com.cn/s/blog_68b4c68f01019mbs.html