2013-04-27 179 views
1

我有一個通用的版本控制問題。我最近編寫了一個應用程序,並計劃在當前工作的基礎上增加新功能。
我的意圖是以兩個不同的應用程序("my application", and "my application plus")結束,這兩個應用程序都基於相同的核心代碼,但其中一個版本具有更多內置功能。
我的問題是,是否有一種方法可讓版本控制設置具有兩個不同的存儲庫(我想),但其中一個存儲庫引用另一個。
所以基本上如果我改變一個應用程序的核心元素之一,它會改變它在兩個。版本控制與多個版本

分支可能是答案,但我總是認爲分支被用於部分代碼的一部分,意圖在稍後將其合併回來而不會中斷或破壞構建。我的情況有點不同。

任何想法?

+2

我建議分離版本和變體,即實現具有不同(構建)配置的變體 - 而不是使用不同的軟件模塊。 – nosid 2013-04-27 21:01:40

+1

正確或者在覈心庫中具有核心功能,並且在與核心庫鏈接的獨立回購庫中具有附加組件。 – tripleee 2013-04-27 21:14:46

回答

-1

通常,您將使用一個幫助分支的系統(如git)並保留單獨的分支(例如:master,master-plus)。每發佈一次,您的git rebase(或git merge)將從您的基本應用程序更改爲加號版本。

PS:你可以ALO做同樣的某種插件的方法和兩個回購

-1

如果您的基本應用已經寫好,你打算實施它的擴展版本,我建議你去思考的子模塊,其是Git的一個特性(在這裏查看:http://git-scm.com/book/en/Git-Tools-Submodules)。這可能是整個應用程序的良好解決方案,也可能只是其核心。考慮使用它。

1

是的,你可以。

我在最近的一個項目中使用了以下策略,該項目在高峯時期有大約5位併發開發人員,並且運行良好。本例中的base代碼是核心專有產品,plus是客戶對base代碼的定製。

我們有這樣的項目空間base;

repo/ 
- base/ 
+ trunk 
+ branches 
+ tags 

我們在plus的基礎上創建了項目空間,並放在同一個存儲庫中;

repo/ 
-base/ 
+ branches 
+ tags 
+ trunk 

-plus/ 
+ branches 
+ tags 
[new trunk will go here] 

使用svn copy克隆base/trunkplus/trunk

baseplus現在共享一個共同的祖先。 plus通過定期將base/trunk合併到plus/trunk而保持最新。按照慣例,我們從來沒有從加回合基地。

Fork Strategy

(我發現)是確保開發者提交時保持紀律最難的部分。如果您開始將base代碼轉入plus以便稍後將其返回,則很容易造成混亂。合併通常非常簡單。

爲了記錄我不會再次在svn中做這個,我會使用git。我之所以用svn來描述它,僅僅是因爲我以前做過。

順便提一句,branch可用於幾個不同的目的 - 功能分支,熱修復,發佈集成,供應商分支......所有分支,但按照慣例,它們意味着不同的事情。我所描述的仍然是某種方式的分支 - 只是一種不按照慣例重新整合其原始主幹的方式。又名叉子。