小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

svn 中tag branch trunk 的用法 - Daniel MySpace聚友博...

 蘇格拉底的智慧 2011-01-14

svn 中tag branch trunk 的用法

2010/02/24 11:52   [計(jì)算世界 ]
分享

在SVN中Branch/tag在一個(gè)功能選項(xiàng)中,在使用中也往往產(chǎn)生混淆。

在實(shí)現(xiàn)上,branch和tag,對(duì)于svn都是使用copy實(shí)現(xiàn)的,所以他們?cè)谀J(rèn)的權(quán)限上和一般的目錄沒(méi)有區(qū)別。至于何時(shí)用tag,何時(shí)用branch,完全由人主觀的根據(jù)規(guī)范和需要來(lái)選擇,而不是強(qiáng)制的(比如cvs)。

一般情況下,
tag,是用來(lái)做一個(gè)milestone的,不管是不是release,都是一個(gè)可用的版本。這里,應(yīng)該是只讀的。更多的是一個(gè)顯示用的,給人一個(gè)可讀(readable)的標(biāo)記。
branch,是用來(lái)做并行開(kāi)發(fā)的,這里的并行是指和trunk進(jìn)行比較。

比如,3.0開(kāi)發(fā)完成,這個(gè)時(shí)候要做一個(gè)tag,tag_release_3_0,然后基于這個(gè)tag做release,比如安裝程序等。trunk進(jìn)入 3.1的開(kāi)發(fā),但是3.0發(fā)現(xiàn)了bug,那么就需要基于tag_release_3_0做一個(gè)branch,branch_bugfix_3_0,基于這 個(gè)branch進(jìn)行bugfix,等到bugfix結(jié)束,做一個(gè)tag,tag_release_3_0_1,然后,根據(jù)需要決定 branch_bugfix_3_0是否并入trunk。

對(duì)于svn還要注意的一點(diǎn),就是它是全局版本號(hào),其實(shí)這個(gè)就是一個(gè)tag的標(biāo)記,所以我們經(jīng)??梢钥吹?,什么什么release,基于xxx項(xiàng)目的 2xxxx版本。就是這個(gè)意思了。但是,它還明確的給出一個(gè)tag的概念,就是因?yàn)檫@個(gè)更加的可讀,畢竟記住tag_release_1_0要比記住一個(gè) 很大的版本號(hào)容易的多。

branches:分枝

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

(svn copy SourceURL/trunk DestinationURL/branchName -m "Creating a private branch of xxxx/trunk." )

trunk:主干

主干,一般來(lái)說(shuō)就是開(kāi)發(fā)的主要呆的地方,


tag:
在經(jīng)過(guò)了一段時(shí)間的開(kāi)發(fā)后,項(xiàng)目到達(dá)了一個(gè)里程碑階段,你可能想記錄這一階段的代碼的狀態(tài),那么你就需要給代碼打上標(biāo)簽。

(svn cp file:///svnroot/mojavescripts/trunk file:///svnroot/mojavescripts/tags/mirrorutils_rel_0_0_1

-m "taged mirrorutils_rel_0_0_1")

另有一說(shuō),無(wú)所謂誰(shuí)對(duì)誰(shuí)錯(cuò)。

trunk:表示開(kāi)發(fā)時(shí)版本存放的目錄,即在開(kāi)發(fā)階段的代碼都提交到該目錄上。

branches:表示發(fā)布的版本存放的目錄,即項(xiàng)目上線時(shí)發(fā)布的穩(wěn)定版本存放在該目錄中。

tags:表示標(biāo)簽存放的目錄。

在這需要說(shuō)明下分三個(gè)目錄的原因,如果項(xiàng)目分為一期、二期、三期等,那么一期上線時(shí)的穩(wěn)定版本就應(yīng)該在一期完成時(shí)將代碼copy到branches上,這 樣二期開(kāi)發(fā)的代碼就對(duì)一期的代碼沒(méi)有影響,如新增的模塊就不會(huì)部署到生產(chǎn)環(huán)境上。而branches上的穩(wěn)定的版本就是發(fā)布到生產(chǎn)環(huán)境上的代碼,如果用戶 使用的過(guò)程中發(fā)現(xiàn)有bug,則只要在branches上修改該bug,修改完bug后再編譯branches上最新的代碼發(fā)布到生產(chǎn)環(huán)境即可。tags的 作用是將在branches上修改的bug的代碼合并到trunk上時(shí)創(chuàng)建個(gè)版本標(biāo)識(shí),以后branches上修改的bug代碼再合并到trunk上時(shí)就 從tags的version到branches最新的version合并到trunk,以保證前期修改的bug代碼不會(huì)再合并。

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

一直以來(lái)用svn只是當(dāng)作cvs,也從來(lái)沒(méi)有仔細(xì)看過(guò)文檔,直到今天用到,才去翻看svn book文檔,慚愧

需求一:
有一個(gè)客戶想對(duì)產(chǎn)品做定制,但是我們并不想修改原有的svn中trunk的代碼。

方法:
用svn建立一個(gè)新的branches,從這個(gè)branche做為一個(gè)新的起點(diǎn)來(lái)開(kāi)發(fā)
svn copy svn://server/trunk svn://server/branches/ep -m "init ep"

Tip:

如果你的svn中以前沒(méi)有branches這個(gè)的目錄,只有trunk這個(gè),你可以用
svn mkdir branches
新建個(gè)目錄

需求二:

產(chǎn)品開(kāi)發(fā)已經(jīng)基本完成,并且通過(guò)很嚴(yán)格的測(cè)試,這時(shí)候我們就想發(fā)布給客戶使用,發(fā)布我們的1.0版本
svn copy svn://server/trunk svn://server/tags/release-1.0 -m "1.0 released"

咦,這個(gè)和branches有什么區(qū)別,好像啥區(qū)別也沒(méi)有?
是的,branches和tags是一樣的,都是目錄,只是我們不會(huì)對(duì)這個(gè)release-1.0的tag做修改了,不再提交了,如果提交那么就是branches

需求三:
有一天,突然在trunk下的core中發(fā)現(xiàn)一個(gè)致命的bug,那么所有的branches一定也一樣了,該怎么辦?
svn -r 148:149 merge svn://server/trunk branches/ep

其中148和149是兩次修改的版本號(hào)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多