您好我已经将本地svn存储库转换为mercurial,在hg中提交了几个修订版,现在希望将更改恢复为svn。
任何人都可以建议如何做到这一点?
我发现https://www.mercurial-scm.org/wiki/WorkingWithSubversion#With_Convert_extension但不幸的是,我没有完成那里描述的转换(只是在本地仓库上进行了hg转换)并且也没有使用MQ。
是否有机会将各个版本推回到颠覆版本,或者我是否能够对这些更改进行局部区分?
答案 0 :(得分:3)
我认为您可以使用hgsubversion。
我会尝试这样做:
export
和import
命令或transplant
扩展名。hg pull --force
从不相关的存储库中提取更改集。 (参见How to combine two projects in Mercurial?)然后,在此之后,您需要运行merge
,当您将更改推送回SVN时可能会出错。因此,您可以尝试使用rebase
或mq
扩展名。mq
扩展名在旧存储库上生成一堆补丁,将它们复制到新存储库,然后应用它们。hg diff -c rev_id
命令很有用)push
个,然后将它们添加到SVN存储库中。答案 1 :(得分:1)
我个人在工作中使用Mercurial来处理我们的subversion存储库。我强烈建议您使用hgsubversion克隆,因为它可以在执行简单推送时提交回subversion存储库。唯一的事情是你必须学习如何重新定义你的更改,因为你不能使用mercurial的合并功能(subversion根本无法理解变更集可能有两个父级)。
如果要删除subversion repo并将其替换为mercurial,则已完成转换的存储库非常有用。不幸的是,这是不可能推迟的(除非你想开始玩差异)
但是,如果使用hgsubversion克隆svn repo,您可能(假设没有合并)可以将您在当前转换的mercurial depot上所做的更改拉入其中。如果存在合并,则必须在传输更改之前对其进行“线性化”。
答案 2 :(得分:1)
这并不像人们想象的那么难。从长远来看,我建议你使用hgsubversion作为其他答案的建议,但有一个非常简单的短期解决方案。
一旦你实现了这一点,实际上并不是很难将两个系统一起使用......但是如果你需要长期的话,hgsubversion可能是一个更好的解决方案。我个人使用上面的系统,因为hgsubversion不处理我们过去对svn repo所做的一些相当离奇的事情。
编辑:我在这个解决方案中假设svn主干已经在你前面移动了;如果不是这种情况,则此过程变得更加简单。如果你想分别合并每个hg修订版,你就没有理由不能这样做,它只需要做更多的工作。