这是一个非常深奥的问题,所以从一开始就澄清一下:我不是在谈论从 svn 到 git、从 git 到 mercurial 或从 mercurial 到 git 的转换。我说的是利用允许 Mercurial 在某种程度上与 git 和 SVN 互操作的“跨系统”插件所产生的复杂情况。
一段时间以来,我使用 Mercurial 的 hg-subversion 插件来“跟踪”code.google.com 上的上游 SVN 存储库。多亏了这个插件,Mercurial 认为存储库是“相关的”,并且能够提取自我上次从存储库中提取以来发生的更改。这允许我维护我自己的私有 Mercurial 存储库,其中包括私有变更集、分支、标签等,但它会定期同步并与上游 SVN 存储库上发生的更改合并。
上游仓库已经干净地从 SVN 转移到了 git。当我说得很清楚时,我的意思是他们已经带走了整个提交树,或者至少是影响我关心的默认/主分支的部分。
我现在的情况是,我有一个最新的 Mercurial 存储库,它与现已失效的 SVN 存储库上的最后一次签入合并,我想开始从新的上游 git 存储库中提取更改,从在 svn 存储库被移动到 github 之后发生的更改。
我可以使用很棒的 hg-git 插件从这个存储库中提取更改,但是由于当前存储库没有与 git 上游存储库“相关”的概念,它会提取所有更改,包括镜像变更集的所有更改已经存在于我的存储库中。
所以我正在寻找的是关于如何让我的 Mercurial 存储库通过 hg-git 考虑自身与上游 git 存储库相关的建议,并将 git 存储库中的所有适当提交视为“已经拉出”维护变更集奇偶性的目的。
我看到内部 hg-git 似乎使用了一个文件 .hg/git-mapfile 我假设它映射上游 git 和本地 Mercurial 存储库之间的变更集。这大概是一个线索。
让我的本地 Mercurial 存储库进入这样一种状态的最简单方法是什么,它基本上表现得好像它是作为上游 git 存储库的克隆开始的,但维护了我自己的所有随着时间的推移添加的不相关的变更集?
(注意:我不希望使用新的克隆“重新开始”,然后应用我的私有更改,因为我想维护此存储库的历史完整性以用于我自己的构建/调试目的)。