2012-08-04 61 views
1

假設我們有以下的(Visual Studio中)項目(簡體):組織大型項目,善變

  • 基LIB-1
  • 基LIB-2
  • 產品-1:取決於base-lib-1
  • product-2:dependi納克上基-LIB-1基-LIB-2
  • 產物-3:視基-LIB-1基-LIB-2和用作一個組件產品-2
  • 產品-4:像產品3

我想這將是一個好辦法在一個或多個Mercurial存儲庫中組織此項目結構。我們目前使用Subversion並將依賴庫作爲外部參數包含在內。

現在,一種方法是將除產品-1之外的所有產品都放在一個存儲庫中,因爲所有這些產品始終作爲單個包一起發佈。我會對這個解決方案感到最舒服,因爲那時我會非常確定如何處理存儲庫。但如何在此方案中適合產品-1而不復制base-lib-1

作爲替代我想過使用,將這樣的組織一些子庫:

  • 產品包裝-A
    • 基LIB-1
    • 產品-1
  • 產品封裝-B
    • 基-LIB-1
    • 基-LIB-2
    • 產物-2
    • 產物-3
    • 產物-4

這種方法的問題是我從來沒有使用過subrepos,所以我不確定這個解決方案會出現什麼缺陷。

例如,subrepos的行爲與SVN外部類似,您可以決定是否始終使用每個subrepo的最新版本或固定版本?

如果您進行更改,subrepos的行爲如何在base-lib-1product-2在同一時間?那些由Mercurial處理的是同一步驟,還是你必須手動提交/推送/更新所有內容?在這種情況下base-lib-1的subrepo如何在product-package-A中表現?

如果我想開發一個新功能分支,需要在多個subrepos中進行更改,分支如何在這種情況下工作?我是否必須手動分支和合並每個存儲庫,還是由Mercurial處理?

使用subrepos組織大型項目還有其他缺陷嗎?在Mercurial中處理大量依賴的大型項目的首選方式是什麼?

回答

2

你的問題是,往往在這裏問了一個問題的一個近乎完美的複製,但我不能找到一個快速搜索一個很好的參考,所以在這裏你去:使用subrepos

以你子問題一次一個:

例如,不要在subrepos表現得像在SVN的外部可以 決定是否要始終使用每個 subrepo的最新或固定版本嗎?

子回購被固定到一個特定的版本,並且父項目指定哪一個。

如何,如果你更改例如做subrepos行爲在base-lib-1和 產品-2在同一時間?那些由Mercurial在相同的 步驟中處理過,還是您必須手動提交/推送和更新所有內容 ?在這種情況下,base-lib-1的subrepo如何在 product-package-A中運行?

這個hg commit是否逗號? 次需要--subrepos選項,這樣你就可以遞歸提交或不根據你的選擇(見man hgrc所有ui.commitsubrepos)。推動總是推動subrepo更改。

如果我想開發一個新的 功能分支,需要在多個subrepos中進行更改,分支在這種情況下如何工作?我是否有 手動分支和合並每個存儲庫,或者是否由 Mercurial處理?

是的,你會手動分支和合並每個回購。

使用subrepos來組織大 項目有沒有其他的陷阱?在Mercurial中使用 許多依賴項來處理較大項目的首選方法是什麼?

只是做一個測試場景第一和實踐。另外,確保人們擁有新的客戶。直到2.1.x之前,這些東西並沒有真正得到完美的用戶界面。