我需要一些幫助爲我的代碼庫設計SCM。代碼庫相當複雜,首先我會試着描述它。用於大型模塊化代碼庫的SCM
代碼庫由許多不同產品的代碼組成,爲了簡單起見,我們假設爲Product1
和Product2
(實際上有更多)。每個Product
都有多個與其關聯的軟件Projects
,例如Core Application
和支持軟件,如iOS
和Android
應用程序(這因產品而異)。每個Project
將需要使用共同的代碼Product
(即Core
,iOS
和Android
應用程序都需要共享一些通用代碼)。此外,Products
需要彼此共享內部的庫房。
實際上,你最終得到這樣的結構:
Library1
Library2
Product1
├── Common
├── Core Application
├── iOS
└── Android
Product2
├── Common
├── Core Application
├── iOS
└── Android
以下功能是絕對必需的:
- 能夠檢查出最小碼爲一個項目設置 - 例如,如果我想構建
Product1's
Android
應用程序,我只想查看Library1
,Library2
,Product1/Common
,Product1/Android
。代碼庫非常龐大檢查一切將需要大量時間 - 將共享庫,通用代碼和項目代碼的狀態恢復爲特定版本 - 例如,我需要構建
Product2's
Core Application
,因爲它是2個月前測試中的錯誤,我需要Library1
,Library2
,Product2/Common
和Product2/Core Application
全部恢復到同一版本 - 將文件移動到不同的共享文件夾,同時維持歷史 - 這是不可能把全部
Product
的正確的代碼進入Common
文件夾在開始。請求隨時間變化的需求和新產品,這意味着曾經住在Product2/Core Application
中的代碼需要移動到Product2/Common
或甚至Library2
。
目前,我們正在使用的系統是一個巨大的SVN倉庫,包含所有Products
,Projects
和Libraries
。在SVN中可以選擇性的代碼簽出,所以我們可以選擇只簽出特定的文件夾。因爲它全是一個版本庫,所以一切都很好地恢復到同一版本。當我們分支或標記時,我們分支/標記整個存儲庫!
我想正確模塊化代碼庫,例如,Library1
住在它自己的存儲庫中,並且簡單地包含在其他存儲庫中。這是不是與svn::externals
真的有可能,因爲它打破要求2
我想用某種形式的DVCS的,爲以下原因:
- 性能 - 提交時SVN是緩慢的大變更
- Braching/Merging - 嘗試合併大型SVN分支是一場噩夢,我們不惜一切代價避免它。我知道使用DVCS更容易。
- 正確支持模塊。我知道Git有子模塊,Mercurial有subrepos,這看起來符合我的設計目標,但似乎在更改修訂版時必須手動更新subrepos。我希望在1個簡單的步驟中完成。
- 更清晰的存儲庫結構。使用subrepos,每個項目將是自己的reposisotry,具有清晰的結構和明確的依賴
任何想法?