2008-08-18 71 views
6

目前我們有一個標準的顛覆庫佈局的項目:何時應該將多模塊項目拆分爲單獨的存儲庫樹?

./trunk
./branches
./tags

然而,正如我們正在向下移動的OSGi和道路模塊化的項目,我們已經結束了:

./trunk/bundle/main
./trunk/bundle/modulea
./trunk/bundle/moduleb ./tags/bundle/main-1.0。 0
./tags/bundle/main-1.0.1
./tags/bundle/modulea-1.0.0

的「建設」仍然是,它建立在序列中的所有模塊相當鐵板一塊,但我初始的M懷疑,如果我們要重構建立/庫的東西更像:

./bundle/main/trunk
./bundle/main/tags/main-1.0.0
./bundle/main /tags/main-1.0.1
./bundle/modulea/trunk
./bundle/modulea/tags/modulea-1.0.0

在這種模式中,我會想象每個模塊構建自己,並將其二進制文件存儲在存儲庫(maven,ivy或其他Subversion存儲庫本身的路徑)中。

一旦模塊化,是否存在針對項目佈局的指導方針或「最佳實踐」?

回答

6

這是非常可達個人喜好,但我發現下面的結構適合於由許多模塊的大型項目:

 
branches 
    project-name 
    module1 
     branch-name 
    module2 
     possibly-another-branch-name 
    branch-name-on-a-higher-level-including-both-modules 
     module1 
     module2 
tags 
    ... (same as branches) 
trunk 
    project-name 
    module1 
    module2 

我也經常使用結構中包含許多項目的大型倉庫,因爲將所有項目保存在同一個存儲庫中可以交叉參考項目並在它們之間共享代碼—,並且歷史記錄—更容易。

我喜歡從根開始就使用根樹幹,標籤和分支文件夾結構,因爲根據我的經驗(包含很多項目的大型存儲庫),許多子項目和模塊永遠不會有單獨的標籤或分支,所以在那裏不需要爲他們創建文件夾結構。它還使開發人員更容易檢查存儲庫的整個主幹,而不是獲取所有標籤和分支(他們大多數時間不需要)。

我想這是項目或公司政策的問題。如果每個項目都有一個存儲庫,或者給定的開發人員一次只能在存儲庫中的單個項目上工作,那麼根源幹線可能沒有多大意義。

0

我已經在StackOverflow Version Control Structure question中回答了類似的問題。它實際上更適合這裏,因爲我們做OSGi開發很重,並且有很多捆綁包。我必須迴應Anders Sandvig的評論:保持trunk/tags/branches在根級別,因爲你只會分支一組有限的模塊。它也不會影響單獨構建的模塊。

我不會複製我之前提出的答案,但它與這個問題完全相關。

3

只是我的兩分錢......

我只是想強調SVN文件(已引述另一個答案,同一個線程)中評論http://svnbook.red-bean.com/en/1.4/svn.reposadmin.planning.html#svn.reposadmin.projects.chooselayout

摘錄引用如下結構: / 主幹/ 鈣/ 日曆/ 電子表格/ ... 標籤/ 鈣/ 日曆/ 電子表格/ 個... 分支/ 鈣/ 日曆/ 電子表格/

「沒有什麼特別不正確有關這樣的佈局是,但它也可能似乎並不爲用戶直觀。特別是在擁有大量用戶的大型多項目情況下,這些用戶可能傾向於只熟悉存儲庫中的一個或兩個項目。但是,作爲分支機構的兄弟姐妹往往不再強調項目的個性化,並將整個項目集中在一個整體上。但這是一個社會問題。我們喜歡我們最初建議的安排,只是出於純粹的實際原因 - 當存在一個存儲整個歷史記錄的單一存儲庫路徑時,更容易詢問(或修改或遷移其他地方)單個項目的整個歷史記錄 - 過去,現在,已標記和。支爲該項目單靠項目」

至於我自己,我傾向於這種相當強烈同意,寧願以下佈局: / utils的/ 鈣/ 主幹/ 標籤/ 分支機構/ 日曆/ 中繼/ 標籤/ 分支/ ... 辦公室/ 電子表格/ 主幹/ 標籤/ 分支/

的原因僅僅是其不切實際的標籤完整的項目集時人會願意只標記一個特定子集。我們使用一個例子:如果project-1依賴於moduleA v1.1和moduleB v2.3,我不希望更新的moduleA v2.x出現在標籤中。事實上,當這些標記版本回來幾天/幾周/幾個月後,我將被迫在標記版本的project-1中打開bundle描述符以讀取實際需要的moduleA版本。此外,如果我必須將此發行版的源代碼的特定備份粘貼到CD上,我只想導出此標籤而不下載數百兆字節的不相關內容。

這只是我的兩美分。

相關問題