首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >允许hgsubversion SVN克隆推回所需的步骤

允许hgsubversion SVN克隆推回所需的步骤
EN

Stack Overflow用户
提问于 2011-03-17 07:39:50
回答 1查看 987关注 0票数 7

我在一个主要使用SVN的团队工作,而我更喜欢在可能的情况下使用Mercurial。我使用hgsubversion建立了SVN回购的hg克隆,几个基本的拉/提交/推似乎运行良好。

现在,经过2周的本地开发(在此期间,我合并了来自外部hg回购的更改,并多次合并了来自SVN回购的更改),我尝试推到SVN回购,但失败了:

中止:抱歉,找不到合并版本的父版本。

我发现其他用户也遇到了同样的问题,关于如何避免这一问题,但我没有遇到任何似乎解决压缩多个并行提交来清理现有hgsubversion的问题。

什么是最好的方法,我可以纠正问题,而不失去我自己的承诺?(一步一步的指示?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-17 12:20:36

您不能将hg合并推到subversion存储库中,因为SVN无法理解它们。您需要在最新的SVN提交的基础上重新调整您的更改。

编辑步骤来平平历史记录:

警告,准备好进行大量合并冲突。

您需要激活mq和rebase扩展。

第一步是创建一个备份回购,因为您将需要它作为即将到来的合并冲突的参考(预期其中许多冲突)。

假设你的图表是这样的:

代码语言:javascript
复制
C1--C2--C3------M1--C5--C6--C7---M2--
  \            / \              /
   \--B1--B2--/   \--B3--B4-B5-/

然后,第二步是在C3:hg rebase -b B2 -d C3的基础上重新设置C3:hg rebase -b B2 -d C3

-b使用两个分支的公共基作为分支重基的开始,因此mercurial发现B1是第一个偏差提交和使用这一点,甚至当您说B2来重基时。-d指定重定向分支的目标。

如果您遇到合并冲突,那么请确保B2‘= M1的结果,否则您将在下面的修订版中得到很多冲突。

之后,合并M1消失了,您的图形如下所示:

代码语言:javascript
复制
C1--C2--C3--B1'--B2'--C5'--C6'--C7'---M2'--
                   \                 /
                    \--B3'--B4'-B5'-/

现在,您对第二个合并:hg rebase -b B3' -d C7'也做了同样的操作,这使您的回购看起来如下:

代码语言:javascript
复制
C1--C2--C3--B1'--B2'--C5'--C6'--C7'--B3''--B4''--B5''

重复,直到你有一个全线性版本的历史。

在您平平历史记录之后,您需要在svn提交的基础上重新排序您的提交。假设您的回购现在看起来如下(S=subversion提交,C=local提交):

代码语言:javascript
复制
S1--S2--S3--C1--C2--S4--S5--C3-C4--C5--C6--C7--S6--S7

现在您将从(包括) C1导入到mercurial队列(hg qimport -rC1:)中的所有内容。若要查看所有创建的修补程序,请使用hg qseries

然后不应用所有修补程序(hg qgoto C1.diff [this is the first one in qseries],后跟hg qpop)。然后删除subversion (hg qdelete S4.diff S5.diff S6.diff S7.diff)。

现在是重新获取svn提交(hg pull »svn-remote«)的时候了。然后,使用hg qpush一个一个地重新应用所有本地修补程序,并修复现在正在发生的所有合并冲突。当您完成一次冲突时,可以使用hg qfinish -a将当前修补程序移动到mercurial提交,并使用hg push »svn-remote«发送当前状态。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5336192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档