这是一个相当深奥的问题,所以从一开始就说明:我不是在谈论从svn到git、git到mercurial或mercurial到git的转换。我说的是利用“跨系统”插件的复杂情况,这些插件允许Mercurial在某种程度上与git和SVN互操作。
一段时间以来,我一直使用hg-subversion插件来“跟踪”code.google.com上的上游SVN存储库。多亏了这个插件,Mercurial认为存储库是“相关的”,并且能够拉入自我上次从repo中拉出以来发生的更改。这允许我维护自己的私有Mercurial存储库,其中包括私有变更集、分支、标记等,但它会定期同步并合并上游SVN repo上发生的更改。
上游回购已经干净利落地从SVN转移到了git。当我说干净时,我的意思是他们已经带走了整个提交树,或者至少是影响我关心的默认/主分支的那部分。
我现在的情况是,我有一个最新的Mercurial存储库,它与现已不存在的SVN存储库上的最后一次签入合并在一起,我想开始从新的上游git存储库引入更改,从svn存储库移动到github之后发生的更改开始。
我可以使用非常棒的hg-git插件从这个存储库中提取更改,但由于当前的存储库没有与git上游存储库“相关”的概念,它将提取所有更改,包括镜像更改集已经存在于我的存储库中的所有更改。
因此,我正在寻找的是关于如何通过hg-git让我的Mercurial存储库考虑自己与上游git存储库相关的建议,并将来自git存储库的所有适当的提交视为“已经提取”,以维护变更集奇偶校验。
我发现hg-git内部似乎使用了一个.hg/ git -mapfile文件,我认为这个文件会映射上游git和本地Mercurial存储库之间的变更集。这可能是一条线索。
让我的本地Mercurial存储库进入这样一种状态的最简单方法是什么?在这种状态下,它实际上就像是上游git存储库的克隆一样,但维护着我自己随时间添加的所有不相关的变更集?
(注意:我不喜欢用新的克隆“重新开始”,然后应用我的私有更改,因为我想为了我自己的构建/调试目的而维护这个存储库的历史完整性)。
发布于 2011-09-21 22:15:57
我以前也用git做过类似的事情。在git->git的情况下,我可以执行一个git-merge --strategy=our,这基本上使我当前的存储库认为所有要合并的内容都是无操作的。
你需要做的就是创建一个分支,它代表了上游所有你知道已经被合并到你的树中的东西,然后执行一种无操作风格的合并到你的树中,然后开始用“真正的”合并来引入变化。
从本网站:
我看到类似下面这样的命令可以帮助您合并到上游存储库中,并忽略上游的所有内容:
$ hg --config ui.merge=internal:local merge #keep my files
这应该允许你重新同步你的下游和上游。
发布于 2011-09-22 01:58:48
我将使用Hg-git克隆新的上游存储库,然后尝试使用Convert扩展将旧的本地存储库中的所有更改拼接到新的存储库中。实际上,我可能会将本地的Hg-git存储库克隆到原生Mercurial存储库中,然后使用两步从上游Git存储库拉取。
发布于 2011-09-21 22:11:36
如果不存在现有的解决方案,我想可以编写一个脚本来修补您的更改并将其提交到基于git-clone的新存储库。您“只需要”关联hg-git-fromsvn和hg-svn之间的svn版本,并复制您在新存储库上执行的更新/修补/提交/合并序列。
对任何人来说,这都是一个有趣的项目。:)
https://stackoverflow.com/questions/7501157
复制相似问题