天天看點

【轉】Subversion版本庫布局

 很多人問我”什麼是推薦的版本庫布局?”,”trunk是什麼意思?”或”trunk有什麼意義?”,本文将會嘗試回答這個問題。

  一個Subversion版本庫實作了一種版本化的檔案系統,版本庫隻是一個包含目錄和檔案的檔案系統,而且它的檔案系統是版本化的,并且實作了”廉價”拷貝,讓它的這種操作比傳統檔案系統便宜很多,但是版本庫本身還是像一個檔案系統:Subversion本身沒有特别的目錄或名稱用來代表trunk或branches,他們隻是檔案系統的普通目錄,這依賴于你給這些目錄名和結構的一種意義。   也就是說,社群已經采納了多種普通的布局作為最佳實踐,是以一個人可以将其視為推薦方式。如果你的版本庫是公共通路的,根據這些習慣,使用者可以友善的通路版本庫來查找他們所需要的。   有兩種常見的布局:   trunk branches tags 第一種布局是版本庫包含一個項目或一組緊密聯系項目的最佳選擇,這個布局非常好用,因為分支與标簽整個項目或一組項目會非常簡單,隻需要一個簡單的指令:   svn copy url://repos/trunk url://repos/tags/tagname -m "Create tagname"   這可能是最常用的版本庫布局,被許多開源項目采用,就像Subversion本身和Subclipse,這是大多數主機站點,如Tigris.org, SourceForge.net和Google Code遵循的方法,這些站點的每個項目有自己的版本庫。   另一種布局是針對一個版本庫包含不相關項目的最佳選擇。   ProjectA   trunk   branches   tagsProjectB   trunk   branches   tags 在這種布局裡,每個項目會存在頂級目錄裡,然後該目錄之下建立trunk/branches/tags,其中與第一種布局相同,這隻是将項目放到自己版本庫方式的替換,他們都在一個版本庫中。Apache軟體基金會使用這種布局方式來存放他們的所有項目在一個版本庫。   通過這種布局,每個項目都有自己的分支和标簽,可以很容易使用一個指令建立分支和标簽,就像前面展示的:   svn copy url://repos/ProjectA/trunk url://repos/ProjectA/tags/tagname -m "Create tagname"   這種布局可以簡單的建立同時包含ProjectA和ProjectB的标簽,你可以這樣做,但是需要多個指令,你也要決定是否建立一個特别的目錄存放這種分支和标簽,如果你需要經常這樣做,你或許應該考慮第一種布局。   至于版本庫中目錄的名稱,再說一遍:隻是一種習慣,他們在Subversion中沒有特别含義。   “trunk”可以認為是項目的開發主線,你可以稱之為 “main”,”mainline”,”production”或任何你喜歡的名字。   “branches”是放置分支的地方,人們因各種目的使用分支,你或許希望通過特性分支或客戶修改分支來隔離你的釋出或維護分支等,在這個例子裡,你可以在branches建立一層目錄,或隻是在頂級目錄建立多個分支目錄。   “tags”也不會被Subversion特别對待,他們隻是習慣,或許通過鈎子腳本或授權規則進行強制,來指明你建立了一個時間點的快照,通常情況下tags與分支的差別就是tags一旦建立不能修改,你也可以将标簽目錄叫做”releases” ,”snapshots”,”baselines”或任何你喜歡的。   記住,名稱對你有意義,不是Subversion。最後,Subversion的架構,全局修訂版本經常使得标簽沒有必要,我不知道隻是因為要建立tag而建立tag有什麼意義,如果你需要在特定時間點重建軟體,你可以通過svn log來确定相關的修訂版本号。tags對于版本庫的”外部”使用者很有用,或許QA/Release團隊需要執行建構,或許是一個内部開發小組希望在另一個産品使用釋出版本,或是外部使用者或客戶希望根據字面含義從版本庫擷取釋出快照,在這些場景中,建立tag是保證擷取正确代碼的最簡單方法,也需要有好的交流機制來指明釋出快照。   希望本文可以為你澄清一些問題,讓你更好的了解Subversion是如何工作的。   最後,我希望指出Subversion版本庫的布局是可以修改的,你可以一直重組和重構布局,最壞情況下,會讓使用者調整他們的工作拷貝,但不會讓你從頭再來,你應該自由的改名,移動目錄或任何你希望改變版本庫的方式去做   來源 http://www.subversion.org.cn   本文來自[Svn中文網]轉發請保留本站位址:http://www.svn8.com/svnpz/20080330/452.html