[英]Submitting Hg changes back to SVN
我已经开始在SVN存储库中工作了。 我已将其子文件夹克隆到带有hg clone
的本地Hg repo中。
之后,我想与一位无权访问SVN存储库的同事分享。 我已经创建了一个私有BitBucket存储库,我们偶尔会推动这些更改,因此我不得不将它们拉出来。
hgsubversion
为变更集做了一些讨厌的事情,比如改变他们的提交者(我甚至相信哈希)。 当我尝试推送到BitBucket仓库时,我不得不进行合并。
由于我们敬爱的朋友,我现在无法将更改推回Subversion存储库, abort: Sorry, can't find svn parent of a merge revision.
。
如何使用svn-targeteding Mercurial存储库拉出BitBucket目标Mercurial存储库,同时保持与hgsubversion
兼容(即,不导入合并修订版)?
当然,一些自动化的方法可以理解,但如果没有这样的事情/简单的方法,我会感激任何解决方案。
我使用hgsubversion
,而不是hgsvn
; 也就是说, hg clone svn://repo/url
的扩展名。 不过,如果有必要,我愿意转换。
当你在subversion存储库上使用Mercurial时,你仍然必须像SVN一样思考,因此基本的mercurial工作流的许多功能部分都无法工作。 合并mercurial的方式在svn仓库中是不可能的。 如果你已经将你的工作与拉动的svn分支合并,那么你将获得臭名昭着的关于你现在得到的消息:(
我建议你阅读durin42对这个问题的回答。
编辑:为了摆脱目前的混乱局面,我建议你从SVN仓库结账时创建一个补丁(或一系列补丁)。 从subversion存储库获取新的新副本并应用补丁。 我不确定你是否可以从你目前的回购中做到这一点。 你可以探索hg diff命令。
hg diff -g -r tip -r XXX > patch
XXX是你原来的SVN结账(我还没有测试过。)
是的,hgsubversion确实会更改提交者名称,因为它必须反映Subversion指定的名称。 然后,Hgsubversion还必须更改变更集散列。 它不是hgsubversion可以决定的东西 - 它在Mercurial的设计中内置,变更集散列基于变更集中的所有信息,包括提交者的名称。
请阅读我的hgsubversion指南 ,了解有关如何正确使用hgsubversion的信息。 需要记住的重点是hgsubversion将hg
转换为更好的svn
,但它仍然是Subversion的主人。 这意味着您必须线性化您的历史记录,然后再将其推回到Subversion,这样才能进行合并或其他有趣的DVCS事情。
如果你想利用Mercurial中的分布式功能,那么可以在小迭代中进行:在Mercurial中进行一些协作,线性化变更集并推回Subversion,销毁克隆的非线性部分,从Subversion中获取。 然后,您可以在Mercurial中重复进行新的协作迭代。
我刚刚遇到了类似的问题,基本上是:
并遇到了可怕的Sorry, can't find svn parent of a merge revision
消息的Sorry, can't find svn parent of a merge revision
。
这就是我在没有太多麻烦的情况下解决它的问题:
SVN Checkout...
命令将SVN repo SVN Checkout...
出到新文件夹(右键单击以访问它)。 .hg
子文件夹)复制到新创建的SVN文件夹,覆盖所有文件。 SVN Commit...
它需要2分钟,一切都应该重新开始工作。 你会丢失一些合并和提交信息,但它不应该是一个问题,因为SVN / HgSubversion组合无论如何都无法跟踪它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.