Mercurial + hgsubversion + svn:2个存储库的故事......(或者,替换变更集?)

时间:2011-11-30 19:53:27

标签: svn version-control mercurial hgsubversion

情境:

我有2个Hg存储库:一个跟踪SVN存储库,比如说 SVN-track ,还有一个本地 pure-Hg 存储库,我从第一个存储库中提取变更集

我将变种集从我的 pure-Hg repo推送到 SVN-track repo,然后我重新定义 SVN-track repo直到历史很好,所以我可以推送到SVN存储库。

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

问题:

现在,如果你已经挂了很长时间,问题就出现了:我想将SVN变更集拉回到 pure-Hg 存储库中,但所有原始变更集都以dupes形式返回(但是另一个头上有不同的节点ID)我可能能够重新设置我在 pure-Hg 存储库中添加的所有变更集,但之后我会丢失历史记录,而且,实际上,这似乎太过分了。我还可以使用带有重复内容的pull-SVN变更集并合并本地,但这会使得结果更加努力地推回到 SVN-track

问题:

  • 有没有更好的方法来执行这个我无法独立完成的工作流程?
  • 如果没有,如何在 pure-Hg 中替换hgsubversion从SVN撤回的原始变更集?
  • 为什么hgsubversion(大部分是一个很好的启用工具)必须将SVN变更集拉回来跟踪它们,它不能只保留原始变更集并在.hg/svn/rev_map添加一行表示原始变更集ID?
  • 如果是这样,这是什么诀窍?

1 个答案:

答案 0 :(得分:0)

hgsubversion需要撤回更改的原因是(我预期),因为在推送之前svn中可能还有其他更改。 svn中的每次提交都包含一个“rebase-to-tip”,它可能会影响你的变更集。因此,它需要将其拉回来以获得实际发生的事情以及新的变更集ID。

Perfarce(perforce扩展)执行类似的操作,但它将原始更改与新提示合并,因此图形实际上是有意义的。我做的所有改变仍然有重复。