2010-07-09 118 views
11

我正在使用Mercurial 1.6。我有一個有幾個subrepos(11)的回購。我想在不推送子回購的情況下將父回購推送到默認的遠程回購。原因想要做到這一點包括:推送mercurial repo而不推送subrepos

  • 我正在使用SSH回購,並且它需要很長時間才能建立連接,並沒有推送到每個subrepos。
  • 我有subrepos提交我不想傳播到遠程回購(還)。
  • Subrepos命名的分支不應傳播到repote回購站(顯然沒有辦法將分支名稱傳遞給subrepos的推送操作)。

但是,我一直無法找到一種方法來實現這一點。我嘗試刪除.hgsub和.hgsubstate(不提交)的內容,但mercurial仍堅持推送subrepos。

我該如何推動從本地倉庫到遠程倉庫的更改並暫時忽略子倉庫?

回答

4

我認爲你需要製作subrepos的本地克隆。

推動主要回購沒有推動subrepos的問題是,subrepos的內容不是主要回購的一部分 - 只有它們的狀態。內容參考.hgsub中指定的原始位置。所以你的主要回購的.hgsubstate說「subrepo A在修訂abcd1234」,但abcd1234是你所做的改變,你不想推動......現在如果你克隆主回購會發生什麼?它會嘗試從其原始位置克隆子報告並將其更新到abcd1234,但該修訂不存在於原始位置,因此克隆將失敗。

相反,您可以製作每個外部存儲庫的本地克隆,並參考那些作爲subrepos的外部位置。然後當您推動主repo時,subrepo更改將只傳播到您的本地克隆。當您準備好分享這些更改時,只需轉到本地克隆並從那裏推入,即可通過分支名稱等。

+0

這是有道理的,它讓我覺得我們不是按照他們打算使用的方式使用subrepos。我們主要使用它們來輕鬆地檢出一個回收集合......而我們的.hgsubstate始終引用subrepos的NULL修訂版本。看起來,hgforest擴展(現已棄用)對於我們的目的比subrepos更好。 – 2010-12-22 14:26:30

+2

這很有道理,但Mercurial似乎過於熱忱。即使該修訂(或其任何後代)在'.hgsubstate'中被調用,它也會嘗試推送'abcd1234'。即使'hg out --S -r .'('-S'用於'rererse into subrepos')也不會列出subrepo的變化。 – weberc2 2014-12-22 15:03:16

+0

我們可以告訴它,如果所有變更集的階段都是公開的,那麼我們可以告訴它不推動,因爲這表明(只要我們沒有手動設置公共階段)它已經被推送。 – 2016-02-17 15:18:34