推动mercurial repo而不推动subrepos

时间:2010-07-09 13:07:11

标签: mercurial subrepos

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

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

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

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

1 个答案:

答案 0 :(得分:4)

我认为你需要制作subrepos的本地克隆。

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

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