SVN中trunk、branches、tag的使用


 我相信初學開發在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部署至相關環境
 
 

  1. 簡介
    1. 我們都知道SVN是管理項目源代碼的軟件,可以把我們開發中的各個階段的代碼記錄下來,供我們以后來使用,那么SVN具體的結構你是否知道呢?下面我們來介紹一下它的基本結構
  1. Trunk、Branches、Tags、作用
    1. Trunk
      1. 這是SVN目錄的主分支,表示日常開發中的項目,任何時候Trunk里包含的都是最新的開發代碼。 這里的代碼將會工作到你的下一個主要發布版本。
      2. Trunk應該只被用來開發將會成為你的下一個重要版本的代碼。
      3. 幾乎常常人們只使用trunk來存放他們的代碼。發放了一個版本后繼續在其上進行下一版開發。這樣開發是混論的,如果出現大的Bug往往不好恢復到之前版本,因此,增加了一個Branches文件
    1. Branches
      1. 常用的Branches分支有好幾種類型,這里列出常用的幾種。
      2.  Release Branches
        1. 當trunk達到准備發布的階段時(或者你想凍結新特色的添加時),你應該創建一個release branches。
      1.  Bug fix branches
        1. 分支也可以用於處理trunk或release branches里發現的嚴重的Bug。
      1. Experimental branches
        1. 有時你想將某個新技術引進項目。這很好,但是你當然不想賭上你的整個項目。想象一下,你想把你的Web程序從PHP4改為PHP5。你要花多少時間?在這期間你的trunk停止使用?直到你把所有到PHP5的轉換做完
    1. Tags
      1. 一般情況下,tag,是用來做一個milestone的,不管是不是release,都是一個可用的版本。這里,應該是只讀的。
      2. 在SVN中Tag和Branches,在一個選項里面創建時區別不明顯,Tags中存放的也是Trunk的一個副本,只不過是只讀的,不可以修改,權限不同。
  1. Trunk、Branches、Tags詳細使用
    1. Trunk
      1. 文件夾中右鍵,選“Create repository here”
        1.  
      1. 選擇“Create folder Structure”,然后,瀏覽建好的文件結構
        1.  
    1. Branches
      1. Create
      1. Merge
        1. Branches To Trunk
          1. 這種方式用的最多,屬於常用的一種。
          2. 在Trunk中,選中UI文件夾,右鍵
            1.  
          1. 如下圖,選擇”merge”
            1.  
          1. 選擇“Merge a range of revisions”
            1.  
          1. 選擇要合並的目錄,這里選擇branches中UI文件夾
            1.  
          1. 合並完成
            1.  
        1. Trunk To Branches
        1. Branches To Branches
    1. Tags
      1. 標記同branches類似,同上.
    1. 意義
      1. SVN解決了我們數據備份、 版本控制、 數據同步等面對的問題,因而深受很多人喜愛和使用,它是一個不錯的管理知識的軟件工具。
      1. 我們自己也可以用SVN管理我們的知識。

http://blog.csdn.net/lilongsheng1125/article/details/8742200

http://blog.sina.com.cn/s/blog_68b4c68f01019mbs.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM