2010-05-04 64 views
4

我一直在研究一個項目一段時間,它已經分成幾個不同的版本。所有版本都有一些通用的代碼庫,每個版本都有獨特的特定功能,每個版本都需要單獨支持。多個存儲庫或具有分支機構的單個存儲庫?

你會推薦什麼樣的SVN結構?現在我正在爲每個項目使用一個單獨的存儲庫,但其缺點是對於大量的產品來說這是不切實際的。使用帶有分支的單個存儲庫的缺點是它會將修訂號添加到每個分支,無論是否提交了任何內容,無論分支來自哪個分支。

你在這種情況下會使用什麼設置?

回答

5

絕對是同一個存儲庫。由於有共同的功能,您通常會將代碼從一個項目移到另一個項目。在存儲庫中移動文件會保留其歷史記錄,而不是通過存儲庫移動它們。

我不明白爲什麼修改分支跳過數字將是問題。

供參考:在工作中,來自整個軟件工程部門(60個編碼器)的所有項目都在同一個svn存儲庫中。

+0

存儲庫之間的「合併」有多好?聽起來像DVCS的工作... – dlamotte 2010-05-04 20:46:44

0

如果它們是相同的代碼庫的所有不同的毒株,然後我會把他們的分支(在單個存儲庫)

我一般只使用一個新的存儲庫不同程序。

0

我使用GIT,因爲它處理分支和合並好很多:)但是對於SVN它將取決於多少個項目以及它們如何相關。如果代碼是同一個程序的所有部分,我會做不同的分支。

如果他們是孤立的項目,那麼你會想要使用不同的存儲庫。

0

一種方法是爲每個項目建立一個通用核心功能和存儲庫的存儲庫,每個項目取決於將進行定製的核心。您可以讓您的子項目使用svn:externals definition拉取核心文件。

這假設核心功能模塊化足以支持此隔離。

+0

這工作得很好,但一個很大的缺點是失去了修訂在所有的svn跟蹤:外部鏈接。除非您將它們固定到修訂版(並因此手動管理對其他存儲庫的更改) – 2011-04-19 09:49:03

0

就我個人而言,我會建議使用DVCS(不要阻止你使用Subversion)併爲每個項目設置一個單獨的存儲庫。

如果有共同的歷史記錄,那麼這些存儲庫可能是相關的。 如果你從未在之前使用DVCS,我建議Mercurial,因爲它很容易在Windows和Linux上學習和工作。

0

除了推薦分支機構而不是多個存儲庫的所有內容之外,對於未受影響的分支機構增加版本號並不是真正的缺點。

0

我會去與一個分支機構的數據庫。我不認爲你應該擔心修訂號碼 - 給你的分公司好名字&使用標籤從外部引用不同的部署。 (例如。 - 爲分支A的構建3製作一個標籤)這樣,您在處理SVN時只需要擔心修訂編號。

1

首先應該做的第一件事是確保您的組件結構(您將程序構建爲鬆散耦合庫的方式)反映了您的需求。

當您在一個或多個單獨的庫中存在公用代碼並且其他代碼太多(但與通用代碼明顯分離)時,事情變得容易得多。然後,您可以像單獨的產品一樣處理您的通用代碼,並將不同的「版本」(如您稱之爲)作爲單獨的程序處理,每個程序都使用公共庫的特定修訂版。

說到這一點,這兩種方法(單獨的存儲庫或一個大的單一存儲庫)都可能工作。如果您的不同「版本」必須真正分開,因爲它們針對具有不同支持協議的不同客戶,恕我直言,獨立版本庫會更好(每個產品一個,共用庫一個),因爲您可以更輕鬆地避免不需要的一方不同版本之間的效果。另一方面,如果情況不同,將所有東西放在一個存儲庫中可以爲您節省大量管理工作,例如,當您經常需要將代碼從公共庫文件轉移到其他組件時,或者反之亦然。

例如,在我們公司,我們有一個軟件產品存儲庫,銷售給其他公司,另一個存儲我們的內部軟件。顯然,我們在這兩種軟件之間的支持需求非常不同。當我們需要在內部代碼中重用我們產品中的庫時,我們編寫了一些簡單的腳本來檢查庫的特定修訂版,並將其複製到內部代碼的構建環境中。我們儘量避免從內部軟件開發到產品開發的太多影響,但是當明確屬於公共庫的內部需求時,我們將其添加到此處,與我們的產品結合進行測試,當它工作時,我們更新我們的腳本以獲得新版本。

1

一個存儲庫。沿途分支和標籤。一旦你習慣了它,它確實沒有問題。

有一些很好的發佈管理實踐,並幫助這個方式(比如哪個版本/分公司其特色等)

相關問題