12

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

  • 我正在使用 SSH 存储库,它需要很长时间才能建立连接并且不向每个子存储库推送任何内容。
  • 我在子存储库中有提交,我不想传播到远程存储库(还)。
  • 子存储库已命名不应传播到存储库存储库的分支(显然没有办法将分支名称传递给子存储库的推送操作)。

但是,我一直无法找到实现此目的的方法。我尝试删除 .hgsub 和 .hgsubstate 的内容(不提交),但仍然善变坚持推送子存储库。

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

4

1 回答 1

4

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

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

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

于 2010-12-21T18:54:43.827 回答