免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
SVN的標準目錄結(jié)構(gòu):trunk、branches、tags | cnMiss's Blog

我們在一些著名開源項目的版本庫中,通常可以看到trunk, branches, tags等三個目錄。由于SVN固有的特點,目錄在SVN中并沒有特別的意義,但是這三個目錄卻在大多數(shù)開源項目中存在,這是因為這三個目錄反映了軟件開發(fā)的通常模式。

trunk是主分支,是日常開發(fā)進行的地方。

branches是分支。一些階段性的release版本,這些版本是可以繼續(xù)進行開發(fā)和維護的,則放在branches目錄中。又比如為不同用戶客制化的版本,也可以放在分支中進行開發(fā)。

tags目錄一般是只讀的,這里存儲階段性的發(fā)布版本,只是作為一個里程碑的版本進行存檔。

比如一個項目有main.cpp, common.h兩個文件,假設(shè)目前在開發(fā)的是最新的3.0版本,而且1.0/2.0版本也在進行維護,那么項目樹將類似如下樣子:

project
  |
  +-- trunk
  +     |
  +     +----- main.cpp  (3.0版本的最新文件)
  +     +----- common.h
  +
  +-- branches
  +     |
  +     +-- r1.0
  +     +     |
  +     +     +---- main.cpp (1.x版本的最新文件)
  +     +     +---- common.h
  +     +
  +     +-- r2.0
  +           |
  +           +---- main.cpp (2.x版本的最新文件)
  +           +---- common.h
  +     
  +-- tags   (此目錄只讀)
        |
        +-- r1.0
        +     |
        +     +---- main.cpp (1.0版本的發(fā)布文件)
        +     +---- common.h
        +
        +-- r1.1
        +     |
        +     +---- main.cpp (1.1版本的發(fā)布文件)
        +     +---- common.h
        +
        +-- r1.2
        +     |
        +     +---- main.cpp (1.2版本的發(fā)布文件)
        +     +---- common.h
        +
        +-- r1.3
        +     |
        +     +---- main.cpp (1.3版本的發(fā)布文件)
        +     +---- common.h
        +
        +-- r2.0
        +     |
        +     +---- main.cpp (2.0版本的發(fā)布文件)
        +     +---- common.h
        +
        +-- r2.1
              |
              +---- main.cpp (2.1版本的發(fā)布文件)
              +---- common.h
要使用這樣的文件夾結(jié)構(gòu),在建立項目版本庫時,可首先建好項目文件夾,并在其中建立trunk, branches, tags三個空的子目錄,再將項目文件夾連同這三個子目錄一起導(dǎo)入版本庫。

這樣在trunk中開始進行開發(fā),當需要建立branch或tag時,使用SVN的copy操作進行。

其中tags目錄需要只讀,可以使用SVN中的authz文件控制該目錄的訪問權(quán)限為只讀。
本節(jié)主要講解一下SVN中tag branch trunk的用法,在SVN中Branch/tag在一個功能選項中,在使用中也往往產(chǎn)生混淆。這里就向大家簡單介紹一下,歡迎大家能和我一起學(xué)習(xí)SVN中tag branch trunk的用法。
在實現(xiàn)上,branch和tag,對于svn都是使用copy實現(xiàn)的,所以他們在默認的權(quán)限上和一般的目錄沒有區(qū)別。至于何時用tag,何時用branch,完全由人主觀的根據(jù)規(guī)范和需要來選擇,而不是強制的(比如cvs)。一般情況下,tag,是用來做一個milestone的,不管是不是release,都是一個可用的版本。這里,應(yīng)該是只讀的。更多的是一個顯示用的,給人一個可讀(readable)的標記。branch,是用來做并行開發(fā)的,這里的并行是指和trunk進行比較。比如,3.0開發(fā)完成,這個時候要做一個tag,tag_release_3_0,然后基于這個tag做release,比如安裝程序等。trunk進入3.1的開發(fā),但是3.0發(fā)現(xiàn)了bug,那么就需要基于tag_release_3_0做一個branch,branch_bugfix_3_0,基于這個branch進行bugfix,等到bugfix結(jié)束,做一個tag,tag_release_3_0_1,然后,根據(jù)需要決定branch_bugfix_3_0是否并入trunk。對于svn還要注意的一點,就是它是全局版本號,其實這個就是一個tag的標記,所以我們經(jīng)??梢钥吹?,什么什么release,基于xxx項目的2xxxx版本。就是這個意思了。但是,它還明確的給出一個tag的概念,就是因為這個更加的可讀,畢竟記住tag_release_1_0要比記住一個很大的版本號容易的多。

branches:分枝
SVN中tag branch trunk的用法,首先看一下branches的介紹。當多個人合作,可能有這樣的情況出現(xiàn):John突然有個想法,跟原先的設(shè)計不太一致,可能是功能的添加或者日志格式的改進等等,總而言之,這個想法可能需要花一段時間來完成,而這個過程中,John的一些操作可能會影響Sally的工作,John從現(xiàn)有的狀態(tài)單獨出一個project的話,又不能及時得到Sally對已有代碼做的修正,而且獨立出來的話,John的嘗試成功時,跟原來的合并也存在困難。這時最好的實踐方法是使用branches。John建立一個自己的branch,然后在里面實驗,必要的時候從Sally的trunk里取得更新,或者將自己的階段成果匯集到trunk中。
(svncopySourceURL/trunkDestinationURL/branchName-m"Creatingaprivatebranchofxxxx/trunk.")

trunk:主干
主干,一般來說就是開發(fā)的主要呆的地方,
tag:  圖標
在經(jīng)過了一段時間的開發(fā)后,項目到達了一個里程碑階段,你可能想記錄這一階段的代碼的狀態(tài),那么你就需要給代碼打上標簽。
(svncpfile:///svnroot/mojavescripts/trunkfile:///svnroot/mojavescripts/tags/mirrorutils_rel_0_0_1-m"tagedmirrorutils_rel_0_0_1")另有一說,無所謂誰對誰錯。
trunk:表示開發(fā)時版本存放的目錄,即在開發(fā)階段的代碼都提交到該目錄上。
branches:表示發(fā)布的版本存放的目錄,即項目上線時發(fā)布的穩(wěn)定版本存放在該目錄中。
tags:表示標簽存放的目錄。
在這需要說明下分三個目錄的原因,如果項目分為一期、二期、三期等,那么一期上線時的穩(wěn)定版本就應(yīng)該在一期完成時將代碼copy到branches上,這樣二期開發(fā)的代碼就對一期的代碼沒有影響,如新增的模塊就不會部署到生產(chǎn)環(huán)境上。而branches上的穩(wěn)定的版本就是發(fā)布到生產(chǎn)環(huán)境上的代碼,如果用戶使用的過程中發(fā)現(xiàn)有bug,則只要在branches上修改該bug,修改完bug后再編譯branches上最新的代碼發(fā)布到生產(chǎn)環(huán)境即可。tags的作用是將在branches上修改的bug的代碼合并到trunk上時創(chuàng)建個版本標識,以后branches上修改的bug代碼再合并到trunk上時就從tags的version到branches最新的version合并到trunk,以保證前期修改的bug代碼不會再合并。
-------------------------------------------------------------------------------------------
介紹SVN中tag branch trunk用法時,一直以來用svn只是當作cvs,也從來沒有仔細看過文檔,直到今天用到,才去翻看svnbook文檔,慚愧
需求一:
有一個客戶想對產(chǎn)品做定制,但是我們并不想修改原有的svn中trunk的代碼。
方法:
用svn建立一個新的branches,從這個branche做為一個新的起點來開發(fā)
svncopysvn://server/trunksvn://server/branches/ep-m"initep"
Tip:
如果你的svn中以前沒有branches這個的目錄,只有trunk這個,你可以用
svnmkdirbranches新建個目錄

需求二:
產(chǎn)品開發(fā)已經(jīng)基本完成,并且通過很嚴格的測試,這時候我們就想發(fā)布給客戶使用,發(fā)布我們的1.0版本
svncopysvn://server/trunksvn://server/tags/release-1.0-m"1.0released"咦,這個和branches有什么區(qū)別,好像啥區(qū)別也沒有?
是的,branches和tags是一樣的,都是目錄,只是我們不會對這個release-1.0的tag做修改了,不再提交了,如果提交那么就是branches

需求三:
有一天,突然在trunk下的core中發(fā)現(xiàn)一個致命的bug,那么所有的branches一定也一樣了,該怎么辦?
svn-r148:149mergesvn://server/trunkbranches/ep其中148和149是兩次修改的版本號。SVN中tag branch trunk用法介紹完畢。

本文主要講解一下SVN組成trunk,branches and tags,主要包括其概念的講解、用法的比較,相信看完本文你肯定有不少收獲,希望本文能教會你更多東西。
在本篇文章中,我將會詳細說明我是如何應(yīng)用SVNtrunk(樹干)、branches(分支)和tags(標記)。這種方法同樣被稱為“branchalways”,兩者非常接近。可能我所介紹的并不是最好的方法,但是它會給新手一些解釋說明,告訴他們trunk、branches和tags是什么,并且該如何去應(yīng)用它們。

當然,如果本文有些要點需要澄清/確認,亦或者有一些錯誤的觀點,還請你評論,自由發(fā)表自己的觀點。
——簡單的對比
SVN的工作機制在某種程度上就像一顆正在生長的樹:
一顆有樹干和許多分支的樹
分支從樹干生長出來,并且細的分支從相對較粗的樹干中長出
一棵樹可以只有樹干沒有分支(但是這種情況不會持續(xù)很久,隨著樹的成長,肯定會有分支啦,^^)
一顆沒有樹干但是有很多分支的樹看起來更像是地板上的一捆樹枝
如果樹干患病了,最終分支也會受到影響,然后整棵樹就會死亡
如果分支患病了,你可以剪掉它,然后其他分支還會生長出來的哦!
如果分支生長太快了,對于樹干它可能會非常沉重,最后整棵樹會垮塌掉
當你感覺你的樹、樹干或者是分支看起來很漂亮的時候,你可以給它照張相,這樣就就可以記得它在那時是多么的贊。
——Trunka
SVN組成Trunka,Trunk是放置穩(wěn)定代碼的主要環(huán)境,就好像一個汽車工廠,負責(zé)將成品的汽車零件組裝在一起。
以下內(nèi)容將告訴你如何使用SVNtrunk:
除非你必須處理一些容易且能迅速解決的BUG,或者你必須添加一些無關(guān)邏輯的文件(比如媒體文件:圖像,視頻,CSS等等),否則永遠不要在trunk直接做開發(fā)
不要因為特殊的需求而去對先前的版本做太大的改變,如何相關(guān)的情況都意味著需要建立一個branch(如下所述)
不要提交一些可能破壞trunk的內(nèi)容,例如從branch合并
如果你在某些時候偶然間破壞了trunk,bringsomecakethenextday(”withgreatresponsibilitiescome…h(huán)ugecakes”)
——Branches
SVN組成branches,一個branch就是從一個SVN倉庫中的子樹所作的一份普通拷貝。通常情況它的工作類似與UNIX系統(tǒng)上的符號鏈接,但是你一旦在一個SVNbranch里修改了一些文件,并且這些被修改的文件從拷貝過來的源文件獨立發(fā)展,就不能這么認為了。當一個branch完成了,并且認為它足夠穩(wěn)定的時候,它必須合并回它原來的拷貝的地方,也就是說:如果原來是從trunk中拷貝的,就應(yīng)該回到trunk去,或者合并回它原來拷貝的父級branch。
以下內(nèi)容將告訴你如何使用SVNbranches:
如果你需要修改你的應(yīng)用程序,或者為它開發(fā)一個新的特性,請從trunk中創(chuàng)建一個新的branch,然后基于這個新的分支進行開發(fā)
除非是因為必須從一個branch中創(chuàng)建一個新的子branch,否則新的branch必須從trunk創(chuàng)建
當你創(chuàng)建了一個新branch,你應(yīng)當立即切換過去。如果你沒有這么做,那你為什么要在最初的地方創(chuàng)建這個分支呢?
——Tags
SVN組成Tags。從表面上看,SVNbranches和SVNtags沒有什么差別,但是從概念上來說,它們有許多差別。其實一個SVNtags就是上文所述的“為這棵樹照張相”:一個trunk或者一個branch修訂版的命名快照。
以下內(nèi)容將告訴你如何使用SVNtags:
作為一個開發(fā)者,永遠不要切換至、取出,或者向一個SVNtag提交任何內(nèi)容:一個tag好比某種“照片”,并不是實實在在的東西,tags只可讀,不可寫。
在特殊或者需要特別注意的環(huán)境中,如:生產(chǎn)環(huán)境(production)、?(staging)、測試環(huán)境(testing)等等,只能從一個修復(fù)過的(fixed)tag中checkout和update,永遠不要commit至一個tag。
對于上述提及到的環(huán)境,可以創(chuàng)建如下的tags:“production”,“staging”,“testing”等等。你也可以根據(jù)軟件版本、項目的成熟程度來命名tag:“1.0.3”,“stable”,“l(fā)atest”等等。
當trunk已經(jīng)穩(wěn)定,并且可以對外發(fā)布,也要相應(yīng)地重新創(chuàng)建tags,然后再更新相關(guān)的環(huán)境(production,staging,etc)
——工作流樣例
假設(shè)你必須添加了一個特性至一個項目,且這個項目是受版本控制的,你差不多需要完成如下幾個步驟:
使用SVNcheckout或者SVNswitch從這個項目的trunk獲得一個新的工作拷貝(branch)
使用SVN切換至新的branch
完成新特性的開發(fā)(當然,要做足夠的測試,包括在開始編碼前)
一旦這個特性完成并且穩(wěn)定(已提交),并經(jīng)過你的同事們確認,切換至trunk
合并你的分支至你的工作拷貝(trunk),并且解決一系列的沖突
重新檢查合并后的代碼
如果可能的話,麻煩你的同事對你所編寫、更改的代碼進行一次復(fù)查(review)
提交合并后的工作拷貝至trunk
如果某些部署需要特殊的環(huán)境(生成環(huán)境等等),請更新相關(guān)的tag至你剛剛提交到trunk的修訂版本,使用SVNupdate部署至相關(guān)環(huán)境
Tags:svn,翻譯。SVN組成中trunk,branches and tags概念、功能和用法等介紹完畢。請關(guān)注本節(jié)的其他報道。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SVN源代碼管理規(guī)范
關(guān)于SVN資源庫的一些思考 軟件工程教程,軟件工程,電腦教程,軟件教程,學(xué)網(wǎng)
用SVN進行團隊開發(fā)協(xié)作生命周期詳解
關(guān)于SVN 目錄結(jié)構(gòu)
常用SVN目錄結(jié)構(gòu)簡明介紹 - 51CTO.COM
svn里的branch、trunk、tag的用處
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服