兩種常見(jiàn)SVN庫(kù)結(jié)構(gòu)簡(jiǎn)明介紹
本節(jié)和大家一起學(xué)習(xí)一下SVN庫(kù)結(jié)構(gòu),SVN庫(kù)結(jié)構(gòu)常見(jiàn)的主要有兩種,本節(jié)做一個(gè)簡(jiǎn)單的介紹,希望通過(guò)本文SVN庫(kù)結(jié)構(gòu)的學(xué)習(xí)能夠拓寬你的視野。
很多人對(duì)”推薦的版本庫(kù)結(jié)構(gòu)?”不是很清楚。””trunk有什么意義?”。
一個(gè)SVN版本庫(kù)實(shí)現(xiàn)了一種版本化的文件系統(tǒng),版本庫(kù)只是一個(gè)包含目錄和文件的文件系統(tǒng),而且它的文件系統(tǒng)是版本化的,并且實(shí)現(xiàn)了”廉價(jià)”拷貝,讓它的這種操作比傳統(tǒng)文件系統(tǒng)便宜很多,但是版本庫(kù)本身還是像一個(gè)文件系統(tǒng):SVN本身沒(méi)有特別的目錄或名稱用來(lái)代表trunk或branches,他們只是文件系統(tǒng)的普通目錄,這依賴于你給這些目錄名和結(jié)構(gòu)的一種意義。
也就是說(shuō),社區(qū)已經(jīng)采納了多種普通的庫(kù)結(jié)構(gòu)作為***實(shí)踐,因此一個(gè)人可以將其視為推薦方式。如果你的版本庫(kù)是公共訪問(wèn)的,根據(jù)這些習(xí)慣,用戶可以方便的訪問(wèn)版本庫(kù)來(lái)查找他們所需要的。
有兩種常見(jiàn)的SVN庫(kù)結(jié)構(gòu):
***種SVN庫(kù)結(jié)構(gòu):
trunk
branches
tags
版本庫(kù)包含一個(gè)項(xiàng)目或一組緊密聯(lián)系項(xiàng)目的***選擇,這個(gè)庫(kù)結(jié)構(gòu)非常好用,因?yàn)榉种c標(biāo)簽整個(gè)項(xiàng)目或一組項(xiàng)目會(huì)非常簡(jiǎn)單,只需要一個(gè)簡(jiǎn)單的命令:
svncopyurl://repos/trunkurl://repos/tags/tagname-m"Createtagname"
這可能是最常用的版本庫(kù)結(jié)構(gòu),被許多開(kāi)源項(xiàng)目采用,就像Subversion本身和Subclipse,這是大多數(shù)主機(jī)站點(diǎn),如Tigris.org,SourceForge.net和GoogleCode遵循的方法,這些站點(diǎn)的每個(gè)項(xiàng)目有自己的版本庫(kù)。
另一種SVN庫(kù)結(jié)構(gòu)是針對(duì)一個(gè)版本庫(kù)包含不相關(guān)項(xiàng)目的***選擇。
ProjectA
trunk
branches
tags
ProjectB
trunk
branches
tags
在這種庫(kù)結(jié)構(gòu)里,每個(gè)項(xiàng)目會(huì)存在***目錄里,然后該目錄之下創(chuàng)建trunk/branches/tags,其中與***種庫(kù)結(jié)構(gòu)相同,這只是將項(xiàng)目放到自己版本庫(kù)方式的替換,他們都在一個(gè)版本庫(kù)中。Apache軟件基金會(huì)使用這種庫(kù)結(jié)構(gòu)方式來(lái)存放他們的所有項(xiàng)目在一個(gè)版本庫(kù)。
通過(guò)這種庫(kù)結(jié)構(gòu),每個(gè)項(xiàng)目都有自己的分支和標(biāo)簽,可以很容易使用一個(gè)命令創(chuàng)建分支和標(biāo)簽,就像前面展示的:
svncopyurl://repos/ProjectA/trunkurl://repos/ProjectA/tags/tagname-m"Createtagname"
這種庫(kù)結(jié)構(gòu)可以簡(jiǎn)單的創(chuàng)建同時(shí)包含ProjectA和ProjectB的標(biāo)簽,你可以這樣做,但是需要多個(gè)命令,你也要決定是否創(chuàng)建一個(gè)特別的目錄存放這種分支和標(biāo)簽,如果你需要經(jīng)常這樣做,你或許應(yīng)該考慮***種SVN庫(kù)結(jié)構(gòu)。至于版本庫(kù)中目錄的名稱,再說(shuō)一遍:只是一種習(xí)慣,他們?cè)赟ubversion中沒(méi)有特別含義。
“trunk”可以認(rèn)為是項(xiàng)目的開(kāi)發(fā)主線,你可以稱之為“main”,”mainline”,”production”或任何你喜歡的名字。
“branches”是放置分支的地方,人們因各種目的使用分支,你或許希望通過(guò)特性分支或客戶修改分支來(lái)隔離你的發(fā)布或維護(hù)分支等,在這個(gè)例子里,你可以在branches創(chuàng)建一層目錄,或只是在***目錄創(chuàng)建多個(gè)分支目錄。
“tags”也不會(huì)被SVN特別對(duì)待,他們只是習(xí)慣,或許通過(guò)鉤子腳本或授權(quán)規(guī)則進(jìn)行強(qiáng)制,來(lái)指明你創(chuàng)建了一個(gè)時(shí)間點(diǎn)的快照,通常情況下tags與分支的區(qū)別就是tags一旦創(chuàng)建不能修改,你也可以將標(biāo)簽?zāi)夸浗凶?rdquo;releases”,”snapshots”,”baselines”或任何你喜歡的。記住,名稱對(duì)你有意義,不是SVN。***,SVN的架構(gòu),全局修訂版本經(jīng)常使得標(biāo)簽沒(méi)有必要,我不知道只是因?yàn)橐獎(jiǎng)?chuàng)建tag而創(chuàng)建tag有什么意義,如果你需要在特定時(shí)間點(diǎn)重建軟件,你可以通過(guò)svnlog來(lái)確定相關(guān)的修訂版本號(hào)。tags對(duì)于版本庫(kù)的”外部”用戶很有用,或許QA/Release團(tuán)隊(duì)需要執(zhí)行構(gòu)建,或許是一個(gè)內(nèi)部開(kāi)發(fā)小組希望在另一個(gè)產(chǎn)品使用發(fā)布版本,或是外部用戶或客戶希望根據(jù)字面含義從版本庫(kù)獲取發(fā)布快照,在這些場(chǎng)景中,創(chuàng)建tag是保證獲取正確代碼的最簡(jiǎn)單方法,也需要有好的交流機(jī)制來(lái)指明發(fā)布快照。
***,我希望指出SVN版本庫(kù)的庫(kù)結(jié)構(gòu)是可以修改的,你可以一直重組和重構(gòu)庫(kù)結(jié)構(gòu),最壞情況下,會(huì)讓用戶調(diào)整他們的工作拷貝,但不會(huì)讓你從頭再來(lái),你應(yīng)該自由的改名,移動(dòng)目錄或任何你希望改變版本庫(kù)的方式去做。本文關(guān)于SVN庫(kù)結(jié)構(gòu)的內(nèi)容講解完畢。
【編輯推薦】