推动mercurial repo而不推动subrepos

Jas*_*mbs 11 mercurial subrepos

我正在使用Mercurial 1.6.我有一个带有一些subrepos(11)的回购.我想将父回购推送到默认的远程仓库而不推送子回购.想要这样做的原因包括:

  • 我正在使用SSH repos,并且需要很长时间来建立连接并且不向每个子目录推送任何内容.
  • 我在subrepos中提交我不想传播到远程存储库(尚未).
  • 子目录已经命名了不应该传播到repote repos的分支(并且显然没有办法将分支名称传递给subrepos的push操作).

但是,我一直无法找到实现这一目标的方法.我尝试删除.hgsub和.hgsubstate的内容(没有提交),但仍然坚持推动subrepos.

如何将更改从本地存储库推送到远程存储库并暂时忽略子存取?

Jes*_*rew 4

我认为您需要制作子存储库的本地克隆。

推送主存储库而不推送子存储库的问题在于,子存储库的内容不是主存储库的一部分 - 只有它们的状态才是。内容是从 中指定的原始位置引用的.hgsub。所以你的主仓库.hgsubstate说“子仓库 A 的版本为 abcd1234”,但 abcd1234 是你所做的更改,你不想推送......现在如果你克隆主仓库会发生什么?它会尝试从原始位置克隆子存储库并将其更新为 abcd1234,但原始位置不存在该修订版本,因此克隆将失败。

相反,您可以对每个外部存储库进行本地克隆,并将它们引用为子存储库的外部位置。然后,当您推送主存储库时,子存储库更改将仅传播到您的本地克隆。当您准备好共享这些更改时,只需转到本地克隆并从那里推送,您就可以传递分支名称等。

  • 这是有道理的,但 Mercurial 似乎过于热心了。即使该修订版(或其任何后代)在“.hgsubstate”中被调用,它也会尝试推送“abcd1234”。即使“hg out --S -r .”(“-S”表示“递归到子存储库”)也不会列出子存储库更改。 (2认同)