这是一个相当深奥的问题,所以我在此明确一下:我不是在谈论从svn转换到git、git转换到mercurial或mercurial转换到git。我谈的是利用“跨系统”插件的复杂情况,这些插件允许Mercurial与git和SVN在某种程度上进行相互操作。
我使用hg-subversion插件来“跟踪”代码库中的upstream SVN repository on code.google.com。由于这个插件,Mercurial认为代码库是“相关的”,并且能够拉取自从我上次拉取代码库以来发生的更改。这使我能够维护自己的私有Mercurial代码库,包括私有变更集、分支、标签等,但是定期同步并合并与upstream SVN repo发生的更改。
upstream repo已干净地从SVN转移到了git。当我说“干净”,我的意思是他们携带了整个提交树,或者至少是我关心的默认/主分支的部分。
现在我面临的情况是,我有一个Mercurial代码库,它与已废弃的SVN代码库最后一次提交保持同步,我想开始从新的upstream git代码库拉取更改,从svn代码库转移到github后的第一个更改开始。
我可以使用很棒的hg-git插件从这个代码库拉取更改,但是由于当前代码库没有被认为与git upstream repo“相关”,它将拉取所有更改,包括那些已经存在于我的代码库中的镜像变更集。
所以我想要的是关于如何让Mercurial代码库通过hg-git将自己视为与upstream git代码库相关,并考虑来自git代码库的所有适当提交,在维护变更集平衡的目的下将其视为“已经拉取”的建议。
我看到内部hg-git似乎使用一个名为.git/git-mapfile的文件,我推测这个文件将upstream git和本地Mercurial代码库之间的变更集进行了映射。这可能是一个线索。
什么是最简单的方法将我的本地Mercurial存储库设置为基本上表现得像从上游git存储库开始克隆,但保留所有已添加的不相关的变更集?(注:我宁愿不要使用全新的克隆,然后应用我的私有更改,因为我想为自己的构建/调试目的维护该存储库的历史完整性。)
hg convert
中很少使用的splicemap
。 - Benjamin Pollack