如何使用hg-git关联现有的Mercurial和git存储库?

dan*_*ass 18 git mercurial hgsubversion hg-git

这是一个非常深奥的问题,所以只是从头开始说清楚:我不是在谈论从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存储库的克隆而开始的,但是保留了我自己随时间添加的所有不相关的变更集?

(注意:我不希望用新的克隆"重新开始",然后应用我的私有更改,因为我想保持此存储库的历史完整性以用于我自己的构建/调试目的).

Ben*_*wyn 5

我以前用git做过类似的事情.在git-> git的情况下,我能够做一个git-merge --strategy = ours,它基本上让我当前的存储库相信所有被合并的东西都是无操作的.

你需要做的是一个代表上游的分支,你知道它已经合并到你的树中,然后在你的树中进行无操作的合并,然后开始用"真正的"合并进行更改.

从这个网站:

https://www.mercurial-scm.org/wiki/TipsAndTricks#Keep_.22My.22_or_.22Their.22_files_when_doing_a_merge

我看到像下面这样的命令可以帮助你合并上游存储库并忽略上游的所有内容:

$ hg --config ui.merge=internal:local merge #keep my files

这应该允许您重新同步下游与上游.