2011-06-14 62 views
5

尋找關於如何在某種版本控制(git或svn,最好)中最好地跟蹤此項目結構的建議:嵌套版本控制方案?

該項目針對的Web服務將具有多個版本的「核心」代碼,用戶可以使用他們想要的任何「核心」(可用版本)創建Web服務的實例。這樣,開發/測試版本將與穩定版本存在於同一臺服務器上。

因此,存在多個「內核」,並且可能會在版本控制中使用不同的版本/標籤/分支。但是接下來是將它們鏈接在一起的總體Web界面,這些界面需要成爲其自己的附加版本控制項目,用於這些Web文件。

從結構的角度來看,它看起來是這樣的:

/-+ 
    | 
    +--index.php 
    +--engine/ 
    | | 
    | +--1.0-stable/ 
    | | | 
    | | +--feature.php 
    | +--2.0-beta/ 
    |  | 
    |  +--feature.php 
    +--main.css 
    +--main.js 

所以,index.phpmain.cssmain.js是自己的「項目」,這是Web界面的一部分,而2.0-beta是一個獨立的發展分支,其更新最終將合併到2.0-stable分支中,並且1.0分支中的任何修補程序feature.php需要合併到2.0 feature.php文件中。

我可以在回購協議裏創建回購協議嗎?這最好如何管理?

回答

3

如果您的目錄結構不必這樣看,我會有兩個存儲庫:一個用於引擎,一個用於基礎架構。引擎回購有兩個(或更多)分支,並且這些分支中的每一個都將基礎設施回購作爲子模塊(對於git;或者如果使用SVN,則使用svn:外部)。

這樣,您可以在引擎分支上正常工作,但共享基礎結構中的更改。當然,如果需要出現,沒有什麼會阻止您在以後創建更多基礎架構分支。

+0

感謝您將我的注意力吸引到git submodules;這看起來像一個可行的選擇! – MidnightLightning

0

您不需要在倉庫內創建倉庫。事實上,如果你使用顛覆,例如(在git中它是類似的),當你想創建一個分支時,你可以通過複製(svn cp)來完成。 Subversion可以在寫入時進行復制(或在修改時複製),因此您可以在單獨的目錄中工作,這些目錄將保持獨立。然後,您可以合併每個分支(subdir)中的更改。

+0

是的,但這意味着如果您對1.0分支中的共享基礎架構進行了一些更改,則很難將它們合併到2.0分支中。 – svick

0

避免大球^ H^H^Hcode。爲您想要部署的每個代碼行使用單獨的分支。如果您打算在分支之間遷移更改,這是最好的方法,因爲您可以分別管理每個分支的提交之間的更改。

通用代碼可以保存在默認分支(主或主幹,取決於您選擇的scm)。

您應該使用scm中的自動部署,然後您可以對其進行配置,以便僅部署選定的分支。

0

我的預感是,將通用框架與各個版本緊密耦合在一起會引起頭痛。也許這會更好:

/-+ 
    | 
    +--discovery/ 
    | | 
    | +--index.php 
    | +--main.css 
    | +--main.js 
    +--engine/ 
    | 
    +--1.0-stable/ 
    | | 
    | +--feature.php 
    +--2.0-beta/ 
     | 
     +--feature.php 

發現部分將管理引擎版本及其當前狀態的列表。每個引擎版本將完全獨立。從發現部分到引擎部署沒有直接的聯繫,只是公佈當前正在運行的版本的一種方式。

對於每個引擎版本的目錄,版本控制的部署將是相當標準的。