掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
本節(jié)和大家一起學(xué)習(xí)一下SVN庫結(jié)構(gòu),SVN庫結(jié)構(gòu)常見的主要有兩種,本節(jié)做一個簡單的介紹,希望通過本文SVN庫結(jié)構(gòu)的學(xué)習(xí)能夠拓寬你的視野。
很多人對”推薦的版本庫結(jié)構(gòu)?”不是很清楚。””trunk有什么意義?”。
一個SVN版本庫實現(xiàn)了一種版本化的文件系統(tǒng),版本庫只是一個包含目錄和文件的文件系統(tǒng),而且它的文件系統(tǒng)是版本化的,并且實現(xiàn)了”廉價”拷貝,讓它的這種操作比傳統(tǒng)文件系統(tǒng)便宜很多,但是版本庫本身還是像一個文件系統(tǒng):SVN本身沒有特別的目錄或名稱用來代表trunk或branches,他們只是文件系統(tǒng)的普通目錄,這依賴于你給這些目錄名和結(jié)構(gòu)的一種意義。
也就是說,社區(qū)已經(jīng)采納了多種普通的庫結(jié)構(gòu)作為***實踐,因此一個人可以將其視為推薦方式。如果你的版本庫是公共訪問的,根據(jù)這些習(xí)慣,用戶可以方便的訪問版本庫來查找他們所需要的。
有兩種常見的SVN庫結(jié)構(gòu):
***種SVN庫結(jié)構(gòu):
trunk
branches
tags
版本庫包含一個項目或一組緊密聯(lián)系項目的***選擇,這個庫結(jié)構(gòu)非常好用,因為分支與標(biāo)簽整個項目或一組項目會非常簡單,只需要一個簡單的命令:
svncopyurl://repos/trunkurl://repos/tags/tagname-m"Createtagname"
這可能是最常用的版本庫結(jié)構(gòu),被許多開源項目采用,就像Subversion本身和Subclipse,這是大多數(shù)主機(jī)站點,如Tigris.org,SourceForge.net和GoogleCode遵循的方法,這些站點的每個項目有自己的版本庫。
另一種SVN庫結(jié)構(gòu)是針對一個版本庫包含不相關(guān)項目的***選擇。
ProjectA
trunk
branches
tags
ProjectB
trunk
branches
tags
在這種庫結(jié)構(gòu)里,每個項目會存在***目錄里,然后該目錄之下創(chuàng)建trunk/branches/tags,其中與***種庫結(jié)構(gòu)相同,這只是將項目放到自己版本庫方式的替換,他們都在一個版本庫中。Apache軟件基金會使用這種庫結(jié)構(gòu)方式來存放他們的所有項目在一個版本庫。
通過這種庫結(jié)構(gòu),每個項目都有自己的分支和標(biāo)簽,可以很容易使用一個命令創(chuàng)建分支和標(biāo)簽,就像前面展示的:
svncopyurl://repos/ProjectA/trunkurl://repos/ProjectA/tags/tagname-m"Createtagname"
這種庫結(jié)構(gòu)可以簡單的創(chuàng)建同時包含ProjectA和ProjectB的標(biāo)簽,你可以這樣做,但是需要多個命令,你也要決定是否創(chuàng)建一個特別的目錄存放這種分支和標(biāo)簽,如果你需要經(jīng)常這樣做,你或許應(yīng)該考慮***種SVN庫結(jié)構(gòu)。至于版本庫中目錄的名稱,再說一遍:只是一種習(xí)慣,他們在Subversion中沒有特別含義。

“trunk”可以認(rèn)為是項目的開發(fā)主線,你可以稱之為“main”,”mainline”,”production”或任何你喜歡的名字。
“branches”是放置分支的地方,人們因各種目的使用分支,你或許希望通過特性分支或客戶修改分支來隔離你的發(fā)布或維護(hù)分支等,在這個例子里,你可以在branches創(chuàng)建一層目錄,或只是在***目錄創(chuàng)建多個分支目錄。
“tags”也不會被SVN特別對待,他們只是習(xí)慣,或許通過鉤子腳本或授權(quán)規(guī)則進(jìn)行強(qiáng)制,來指明你創(chuàng)建了一個時間點的快照,通常情況下tags與分支的區(qū)別就是tags一旦創(chuàng)建不能修改,你也可以將標(biāo)簽?zāi)夸浗凶觥眗eleases”,”snapshots”,”baselines”或任何你喜歡的。記住,名稱對你有意義,不是SVN。***,SVN的架構(gòu),全局修訂版本經(jīng)常使得標(biāo)簽沒有必要,我不知道只是因為要創(chuàng)建tag而創(chuàng)建tag有什么意義,如果你需要在特定時間點重建軟件,你可以通過svnlog來確定相關(guān)的修訂版本號。tags對于版本庫的”外部”用戶很有用,或許QA/Release團(tuán)隊需要執(zhí)行構(gòu)建,或許是一個內(nèi)部開發(fā)小組希望在另一個產(chǎn)品使用發(fā)布版本,或是外部用戶或客戶希望根據(jù)字面含義從版本庫獲取發(fā)布快照,在這些場景中,創(chuàng)建tag是保證獲取正確代碼的最簡單方法,也需要有好的交流機(jī)制來指明發(fā)布快照。
***,我希望指出SVN版本庫的庫結(jié)構(gòu)是可以修改的,你可以一直重組和重構(gòu)庫結(jié)構(gòu),最壞情況下,會讓用戶調(diào)整他們的工作拷貝,但不會讓你從頭再來,你應(yīng)該自由的改名,移動目錄或任何你希望改變版本庫的方式去做。本文關(guān)于SVN庫結(jié)構(gòu)的內(nèi)容講解完畢。
【編輯推薦】

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流