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