将更改从一个Mercurial存储库添加到另一个存储库

Pat*_*gne 8 svn mercurial mercurial-convert

将我的项目FakeItEasy的VCS 从SVN 更改为Google Code上的Mercurial时,我有点过于渴望(我很有趣).我所做的只是检查SVN的最新版本,然后将结帐作为新Mercurial仓库的第一个修订版.这显然会导致所有历史遗失.

后来当我对Mercurial采取了更好的习惯时,我意识到有一个"转换扩展"这样的东西允许你将SVN仓库转换为Mercurial仓库.现在我要做的是转换旧的SVN仓库,然后将当前存在的Mercurial仓库中的所有变更集导入到此转换后的仓库中,除了第一次提交到Mercurial.

我已经将SVN回购转换为当地的Mercurial回购,但现在是我被困的时候.我以为我能够使用转换扩展来将当前的Mercurial存储库转换为已转换的存储库并且使用拼接映射删除第一次提交,但我似乎无法使其工作.

我也尝试过使用不带拼接映射的转换来从当前的Mercurial repo到转换后的版本中获取所有更改集,并将当前第二个版本的rebase从旧SVN存储库中的最后一次提交但是我无法获得那要么工作.

为了使这个更清楚,我可以说我有这两个存储库:

A: revA1-revA2
B: revB1-revB2-revB3 (Where revB1 is actually a copy of revA2)
Run Code Online (Sandbox Code Playgroud)

现在我想将这两个组合到包含以下内容的新存储库中:

C: revA1-revA2-revB2-revB3
Run Code Online (Sandbox Code Playgroud)

Ry4*_*ase 11

只要你改变新版本的哈希值(你是),你也可以使用exportimport(或者transplant是围绕两者的包装器的命令).

你已经完成了你的转换,这很棒,现在进入回购B并做:

hg export -o 'changeset-%R.patch' 1:tip
Run Code Online (Sandbox Code Playgroud)

这将为repo B中的每个变更集创建一个变更集 - ##.补丁,除了第一个(编号为零).

现在去回购C并导入它们:

hg import $(ls *.patch | sort -V)
Run Code Online (Sandbox Code Playgroud)

如果revA2和revB1确实相同,那么应该干净利落地应用.