4

设想:

我有 2 个 Hg 存储库:一个跟踪 SVN 存储库,比如SVN-track,以及一个本地纯 Hg存储库,我从第一个将变更集拉入其中。

我将纯汞存储库中的变更集推送到SVN-track存储库中,然后我在SVN-track存储库中重新设置推送的变更集,直到历史记录完好无损,这样我就可以推送到 SVN 存储库。

在我推送到 SVN 后,hgsubversion 从 SVN 拉回变更集并剥离原始变更集。这就是它的追踪方式,我收集了(但是......为什么不保留原件并追踪呢?)。

问题:

现在,如果你坚持了这么久,问题来了:我想将 SVN 变更集拉回纯 Hg存储库,但所有原始变更集都以另一个头上的欺骗(但具有不同的节点 ID)的形式返回。我可能能够重新设置我在纯汞存储库中添加的所有变更集,但是我会丢失历史记录,而且真的,这看起来工作量太大了。我也可以只使用具有重复内容的拉取 SVN 变更集并合并本地,但这使得返回到SVN 轨道的结果越来越难。

问题:

  • 有没有更好的方法来执行这个我无法独立完成的工作流程?
  • 如果不是,我如何替换 hgsubversion 从纯汞中的 SVN 拉回的原始变更集?
  • 为什么必须 hgsubversion(大部分情况下是一个很棒的启用工具)拉回 SVN 变更集来跟踪它们,难道它不能只保留原始变更集并添加一行来.hg/svn/rev_map指示原始变更集 id 吗?
  • 如果是这样,这有什么诀窍?
4

1 回答 1

0

hgsubversion 需要撤回更改的原因是(我希望)因为在您进行推送之前,svn 中可能已经发生了其他更改。svn 中的每个提交都包含一个“rebase-to-tip”,它可能会影响您的变更集。因此,它需要将其拉回以获取实际发生的情况和新的变更集 ID。

Perfarce(perforce 扩展)做了类似的事情,但是它将原始更改与新提示合并,因此该图实际上是有意义的。尽管如此,我所做的所有更改仍然存在重复。

于 2011-12-01T10:57:37.883 回答