Iva*_*ica 16 svn mercurial dvcs hgsubversion
我已经开始在SVN存储库中工作了.我已将它的子文件夹克隆到当地的Hg仓库中hg clone.
之后,我想与一位无权访问SVN存储库的同事分享.我已经创建了一个私有BitBucket存储库,我们偶尔推动这些更改,因此我不得不拉它们.
hgsubversion做一些令人讨厌的改变集,比如改变他们的提交者(我甚至相信哈希).当我尝试推送到BitBucket仓库时,我不得不进行合并.
由于我们敬爱的朋友,现在我无法将更改推回到Subversion存储库中abort: Sorry, can't find svn parent of a merge revision..
如何使用svn-targetinging Mercurial存储库拉出BitBucket目标Mercurial存储库,同时保持兼容hgsubversion(即不导入合并修订版)?
当然,一些自动化的方法可以理解,但如果没有这样的事情/简单的方法来做到这一点,我将不胜感激任何解决方案.
我用hgsubversion,不是hgsvn; 也就是说,一个人所做的扩展hg clone svn://repo/url.不过,如果有必要,我愿意转换.
Eri*_*arl 21
当你在subversion存储库上使用Mercurial时,你仍然必须像SVN一样思考,因此基本的mercurial工作流的很多功能部分都无法工作.合并mercurial的方式在svn仓库中是不可能的.如果你已经将你的工作与拉动的svn分支合并,那么你将获得臭名昭着的关于你现在得到的消息:(
我建议你阅读durin42对这个问题的回答.
编辑:为了摆脱目前的混乱局面,我建议你从SVN仓库结账时创建一个补丁(或一系列补丁).从subversion存储库获取新的新副本并应用补丁.我不确定你是否可以从你目前的回购中做到这一点.你可以探索hg diff命令.
hg diff -g -r tip -r XXX > patch
Run Code Online (Sandbox Code Playgroud)
XXX是你原来的SVN结账(我还没有测试过.)
Mar*_*ler 10
是的,hgsubversion确实会更改提交者名称,因为它必须反映Subversion指定的名称.然后,Hgsubversion 还必须更改变更集散列.它不是hgsubversion可以决定的东西 - 它在Mercurial的设计中内置,变更集散列基于变更集中的所有信息,包括提交者的名称.
请阅读我的hgsubversion指南,了解有关如何正确使用hgsubversion的信息.要记住的重点是hgsubversion变得hg更好svn,但仍然是Subversion是主人.这意味着您必须线性化您的历史记录,然后再将其推回到Subversion,这样才能进行合并或其他有趣的DVCS事情.
如果你想利用Mercurial中的分布式功能,那么可以在小迭代中进行:在Mercurial中进行一些协作,线性化变更集并推回Subversion,销毁克隆的非线性部分,从Subversion中获取.然后,您可以在Mercurial中重复进行新的协作迭代.