2012-08-22 41 views
3

所以我們有應用程序Pluto和一個應用程序Goofy - 兩者都使用相同的SVN項目。實際上只有一點配置差異。從一個SVN項目獲得2個產品 - 如何僅對某個產品保留某些更改?

現在我面臨這個問題:來自Pluto的客戶需要一些新的更改 - 具體來說,他希望爲Javascript添加功能以及我們在JSF環境中使用的一些xhtml標籤。基本上,這是一個改進的JavaScript-他明智的要求 - 舊的功能必須存在。但是:新功能可能會破壞部分Goofy,因爲Goofy是一個更大的應用程序,並且很難測試。其實古菲是冥王星的超集 - 例如高飛可以做任何冥王星的事情 - 但事實上它只是用於測試,最終的產品駐留在冥王星。

需要修改的文件非常靜態,我認爲其中一個文件的最後修改時間超過半年前。過去兩年肯定不會有多少變化。

我想過的是爲冥王星創建一個分支,在那裏我實現對javascript和xhtml標記的所有更改。開發人員將在trunk上開發,並且在部署之前我會始終合併分支上的更改(這可能會自動完成)。 但是:本地開發存在一個問題 - 因爲它是中繼,新功能只在分支上,所以在爲Pluto本地開發時,新功能將不可用。

另一種方法是使用例如如果應用程序== Goofy加載JavaScript高飛,反之亦然。

最後 - 嘗試和錯誤,例如只是合併所有的變化和修復錯誤:-)

你們會如何決定呢?

回答

3

我會使用不同的分支,並接受使用特殊技巧如if application==Goofy一週中的任何一天的不便。當你的程序複雜度增加,並且可能會增加更多的應用程序時,後面的實現會讓你回頭看看。

可能更適合您的另一種方法是重構您的代碼並將應用程序的核心部分分解到它自己的項目中。然後讓每個應用程序分別參考核心項目。例如,核心部分可以包含業務邏輯,而Goofy/Pluto處理某些核心部分的GUI和/或特殊實現。您的SVN樹可能看起來類似於:

trunk 
    |--- Core stuff 
    |--- Project Pluto 
    |--- Project Goofy 

一個更復雜,但非常靈活,方法是將核心員工轉移到自己的倉庫。然後,您可以使用svn:externals將核心部件包含到您的項目中。這會給你帶來的好處是能夠鎖定冥王星和古菲某些修改的核心內容。因此,您可以更新Core內容以添加更多功能,這些功能對於一個項目而言是必需的,但對另一個項目有害或不期望。我已經看到這在行動,它運作良好。我們的遺留代碼已經過時了,但仍在編譯和工作,儘管遺留項目開發停止後核心部分已經升級了多年。

Core trunk 
    |--- Core stuff (rev 123) 

Application trunk 
    |--- Project Pluto (Core rev 111) 
    |--- Project Goofy (Core head) 

博客文章svn:externals應該是有用的,如果你想玩弄最後一個選項。

+0

+1爲您重構項目的「另一種方法」。 – hometoast

相關問題