Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Hg更改提交回SVN_Svn_Mercurial_Dvcs_Hgsubversion - Fatal编程技术网

将Hg更改提交回SVN

将Hg更改提交回SVN,svn,mercurial,dvcs,hgsubversion,Svn,Mercurial,Dvcs,Hgsubversion,我开始在SVN存储库中工作。我已经用hgclone将它的一个子文件夹克隆到本地Hg repo中 之后,我想与一位无法访问SVN存储库的同事分享这一点。我已经创建了一个私有的BitBucket存储库,我们偶尔会推送这些更改,因此我不得不拉它们 hgsubversion对变更集做了一些令人讨厌的事情,比如更改其提交者(我甚至相信哈希)。当我尝试推拉比特桶回购时,我不得不进行合并 现在我无法将更改推回到Subversion存储库,因为我们敬爱的朋友,中止:抱歉,找不到合并修订版的svn父项。 如何在保

我开始在SVN存储库中工作。我已经用
hgclone
将它的一个子文件夹克隆到本地Hg repo中

之后,我想与一位无法访问SVN存储库的同事分享这一点。我已经创建了一个私有的BitBucket存储库,我们偶尔会推送这些更改,因此我不得不拉它们

hgsubversion
对变更集做了一些令人讨厌的事情,比如更改其提交者(我甚至相信哈希)。当我尝试推拉比特桶回购时,我不得不进行合并

现在我无法将更改推回到Subversion存储库,因为我们敬爱的朋友,
中止:抱歉,找不到合并修订版的svn父项。

如何在保持与
hgsubversion
兼容的同时(即不导入合并修订版),将针对Mercurial的BitBucket存储库与针对svn的Mercurial存储库结合起来

当然,一些自动化的方法会很感激,但是如果没有这样的事情/简单的方法,我将非常感谢任何解决方案


我使用的是
hgsversion
,而不是
hgsvn
;也就是说,执行
hg克隆的扩展svn://repo/url
。不过,如果有必要的话,我愿意进行切换。

当您在subversion存储库上使用Mercurial时,您仍然必须像SVN那样思考,因此Mercurial基本工作流程中的许多功能都无法工作。合并mercurial的方式在svn仓库中是不可能的。如果您已经将您的工作与拉入的svn分支合并,您将得到关于您现在得到的消息的臭名昭著的消息:(

我建议你读一下durin42的答案

编辑:为了摆脱当前的混乱局面,我建议您从SVN repo签出点创建一个修补程序(或一系列修补程序)。从subversion存储库获取新的副本并应用修补程序。我不确定您是否能够从当前repo执行此操作。您可以探索hg diff命令

hg diff -g -r tip -r XXX > patch

XXX是您最初的SVN签出(我还没有测试过)

是的,hgsubversion确实会更改提交者的名称,因为它必须反映Subversion分配的名称。hgsubversion必须然后还要更改变更集哈希。这实际上不是hgsubversion可以决定的事情——它内置于Mercurial的设计中,即变更集哈希基于变更中的所有信息集合,其中包括提交者的名称

有关如何正确使用hgsubversion的信息,请阅读我的文章。需要记住的重要一点是,hgsubversion将
hg
转化为更好的
svn
,但仍然是Subversion是主控程序。这意味着您必须在将历史推回到Subversion之前对其进行线性化,以避免合并或其他有趣的DVCS的事情


如果您确实想利用Mercurial中的分布式功能,那么就在小迭代中进行:在Mercurial中进行一些协作,将变更集线性化并推回Subversion,销毁克隆的非线性部分,从Subversion中提取。然后您可以在Mercurial中重复协作的新迭代。

Ist遇到了类似的问题,基本上是:

  • 使用HgSubversion克隆SVN repo
  • 通过一些合并来解决它
  • 试图把它拉回到前SVN回购协议
并遇到了可怕的
抱歉,找不到合并修订版的svn父级消息

这就是我在没有太多麻烦的情况下修复它所做的:

  • 从下载并安装TortoiseSVN
  • 使用上下文Windows资源管理器菜单中的
    SVN Checkout…
    命令将SVN repo签出到新文件夹(右键单击以访问它)
  • 将本地HG文件夹的内容(仅不包括
    .HG
    子文件夹)复制到新创建的SVN文件夹,覆盖所有文件
  • 右键单击该文件夹并执行
    SVN提交…
  • 扔掉你的HG回购协议,从现在更新的SVN回购协议中收回

  • 这需要2分钟,一切都应该重新开始工作。您将丢失一些合并和提交信息,但这不应该是一个问题,因为SVN/HgSubversion组合无论如何都无法跟踪它们。

    不清楚您是否使用hgsvn或HgSubversion(不同的工具)。抱歉,不清楚!我使用HgSubversion(扩展).更新的问题。-1.在将hg存储库与仅限hg的操作弄乱后,我正在尝试找到一种方法将hg存储库转换为hgsubversion存储库。“你不能这样做,也不应该这样做”--我可以自己提出,但我仍然想将更改导入Subversion repo,使历史变得平淡。了解为什么它不起作用是找到解决方案的第一步。我更新了我的答案,希望这会有所帮助。我不是在安装了mercurial的计算机上,所以我没有测试。但是这就是我要尝试的方法。我将编写一个脚本,消除增量差异,同时保留日志消息。-1=>+1,并接受。谢谢!谢谢!投票赞成;正如另一条评论中提到的,我将编写一个脚本手动线性化历史,只保留变更集内容和日志消息。