8

我在使用subrepos在Mercurial中設置項目時遇到問題。我可以在Mercurial中嵌套subrepos嗎?

目標:

我想建立結構如下所示:

-- Build_Repo (this repo will be used to track dependencies) 
    -- Subrepo_A (this is the main source) 
    -- Modules (Part of Subrepo_A) 
     -- Subrepo_B 

所以有三個回購協議:建立,A和B. B被嵌套在裏面,A是嵌套在根構建庫中。 build repo將用於跟蹤依賴關係,subrepo A將用於跟蹤主源文件,subrepo B(和其他)將用於跟蹤模塊/插件的開發。

問題/疑問

我沒有問題,建立初始構建回購,通過簡單地將Subrepo_A路徑和源到.hgsub文件,並將其提交到構建回購嵌套Subrepo_A。然而,當後我加入subrepo_B路徑/源極到構建回購的.hgsub,然後嘗試提交我得到的錯誤信息:

中止:路徑「Subrepo_A /模塊/ Sebrepo_B」裏面嵌套回購「 Subrepo_A'

Mercurial在一個已經嵌套的repo中似乎不喜歡嵌套的repo。這是真的,還是我錯過了什麼?關於如何管理構建/依賴的更好的想法?

+0

你使用什麼語言/工具集?一般來說,作爲依賴管理的子回購是次優的。我喜歡構建一個模塊,發佈它的構件(nexus,artifactory等),並讓相關模塊使用它。 – thekbb

回答

0

在你的情況下,你必須將subrepoB添加到subrepoA。

我會建議嘗試移動依賴關係,以便您的樹只有2個級別,但這可能是不可能的。否則它總是不是一個非常流暢的體驗。

+1

關於在這種情況下如何管理依賴關係的其他建議? –

+0

正如其他人所指出的那樣,答案是將subrepoB作爲subrepoA的subrepo,subrepoA是build_repo的subrepo。看起來你不想這樣做是出於某種原因。如果是因爲subrepoA是你無法控制的項目的克隆,因此不能添加subrepo,解決方法是製作subrepoA的私有分支/克隆,並將其用作「 subrepoA」。通過這種方式,您可以向其添加自定義設置(爲其添加子對象),並與subrepoA的對象/外部更新保持同步。 –

1

這裏的問題是Mercurial不可避免的約束之一:一個存儲庫對應於您的計算機上的文件夾樹。該存儲庫負責該文件夾樹下的所有內容。

當您的頂級存儲庫包含子存儲庫時,它將切換到其文件夾結構的該部分的子存儲庫完全控制。因此頂層無法在第一個子回購文件夾中的某處指定另一個子存儲庫。

溶液1

Subrepo_B實際上是Subrepo_A的依賴關係。在這種情況下,通過編輯Subrepo_A的.hgsub文件來使您的存儲庫反映真正的依賴關係,以在Modules/Sebrepo_B下添加Subrepo_B。這是有效的,因爲Subrepo_A保留對其文件夾的控制權。

解決方案2

Subrepo_A不依賴於Subrepo_B,你把它那裏方便。在這種情況下,您應該使Subrepo_A和Subrepo_B都成爲Build_Repo的子對象(位於不同位置)。

相關問題