7

我正在尋找處理多平臺項目時有關存儲庫佈局/設計的策略。通常依賴關係是:多平臺項目存儲庫設計的策略

  • 項目都有單獨的名稱/品牌
  • 每個平臺都有單獨的源代碼
  • 平臺的代碼共享的公共資源
  • 設計文檔和其他文檔平臺之間共享

我已經試過(使用git)如下:

溶液A:

  • 每個平臺項目駐留在自己的目錄
  • 承諾去master所有平臺

優勢

  • 乾淨的代碼開發
  • 不合並

缺點

  • 日誌是一個爛攤子,你通常需要前綴的所有提交日誌與平臺
  • 有時倒車提交的..不可能或很難/凌亂

解決方案B:

  • 每個平臺都有自己的分公司
  • 時釋放底墊在每個分支執行,然後合併到master +標籤

優點

  • 清潔日誌:)
  • 發展pogress完全分離
  • 少衝突

缺點

  • 需要合併到master
  • 當所有平臺在變基同一時間 - 合併到主人是HELL

我很猶豫創建每個平臺的存儲庫作爲共享資源可能是困難或需要額外的,可能容易出錯,任務。

期待您的專業人士。

+0

在這個_「多平臺項目」_中使用不同的編程語言_,如C,Java等? – yorkw

+0

當然,Java for Android,Objective-C for iOS還有更多。我的意思是額外的任務,例如 –

回答

2

這似乎是一個放大問題。存儲庫通常包含一個項目。一個項目的多個部分可能共享一個公用事業模塊,但對於小型項目而言,規模還不足以將公用事業模塊作爲自己的實體分離出去。但是,一旦實用程序模塊變得「大」,或者需要將需要分離的多個獨立實體分離出來,它就需要成爲自己的(版本化)模塊。

我的方法是使用單獨的存儲庫,取決於涉及多少代碼。我不確定你添加的任務是什麼意思,儘管它是一個重要的重構。我要做的第一件事就是將共享資源合併到一個獨立的存儲庫中,並將這些共享資源的版本合併爲每個平臺版本中的(特定於版本)依賴項。從單個共享資源版本中分離出每個平臺上的開發。無論如何,對共享項目的每一次改變都需要對每個平臺進行測試,現在你的分界線已經很清晰瞭然後,您可以一次將每個項目設置爲自己的存儲庫。

如果您希望在多個平臺上擁有項目的「共享版本」,則需要一個「項目」,它是構建代碼的根目錄。您也可以考慮對該代碼使用共享存儲庫,但將共享代碼的發佈與該項目的發佈相結合。如果你的代碼已經達到這種複雜程度,你可能想要的是另一個存儲庫,只是用於存放你的構建代碼的「元項目」。除非你有一組瘋狂的大型項目可供使用,否則多個項目的構建可能都駐留在一個存儲庫中,從而允許它們共享通用代碼。同樣的問題再次出現,但是規模較小,一個存儲庫就可以工作。請注意,所有這些都假定了某種程度的自動化測試:)

我對多模塊項目的使用經驗來自使用perl和java。在perl中,使用來自CPAN的許多獨立共享模塊是常態。在java中,可以使用Apache Ivy或Maven來處理模塊化依賴關係。我在一個具有公司頂級元項目的環境中使用Maven,併爲每個產品(依賴於公司元項目)分別開發項目。每個項目都可以自由地做它所需要的。從一個項目升級的代碼在兩個或更多項目之間共享將成爲其自己的項目。一個特別大的項目最終分成幾個項目,都是從它自己的「元項目」繼承而來。處理這種層次依賴是Maven和Ivy所要做的。我們使用Jenkins/Hudson作爲集成服務器,每天晚上自動檢查跨項目構建(假設編寫測試時沒有人推卸責任......)。一旦我們需要更改整個公司的網站。沒問題,在公司元項目中更改過一次,並在每個項目的新版本中自動提取!

+0

。如果使用單獨的回購(或git子模塊),則需要記住*在公共資源發生更改時更新所有平臺 - 如果無法自動執行更新。這有時會被遺忘,並可能導致不必要的麻煩。 –

+0

在每個平臺構建中包含一個測試,檢查每個公共依賴的當前版本是否最新。這確實需要通過測試訪問共享位置,最常見的代碼來自於存儲庫。你只需要做一次。如果您忽略測試,平臺可以繼續使用較早的通用代碼版本,但測試仍然失敗。 –

+0

任何人都知道這個主題的一些合法寫作?這可能是人們走出svn世界的熱門話題。我需要更多的彈藥。 – Nick

1

可能另一種解決方案:

分成三個(或更多)庫:

platform1 specific 
platform2 specific 
common for all platforms 

你可以再通過submodules添加公共回購到其他存儲庫。

此外,Google還通過開發自定義工具來解決Android資源庫中的類似問題:repo。 Repo使用包含XML文件(manifest.xml或default.xml,見.repo/manifests)的定製git存儲庫(清單)列出應該檢出哪些Git存儲庫。這樣,你也可以像上面那樣創建三個存儲庫,另一個包含XML文件以將它們一起使用,或者甚至爲這個清單git中的每個平臺創建分支。

雖然我應該警告說,回購是非常重要的Gerrit