我在一个主要使用SVN的团队工作,而我更喜欢在可能的情况下使用Mercurial。我使用hgsubversion建立了SVN回购的hg克隆,几个基本的拉/提交/推似乎运行良好。
现在,经过2周的本地开发(在此期间,我合并了来自外部hg回购的更改,并多次合并了来自SVN回购的更改),我尝试推到SVN回购,但失败了:
中止:抱歉,找不到合并版本的父版本。
我发现其他用户也遇到了同样的问题,关于如何避免这一问题,但我没有遇到任何似乎解决压缩多个并行提交来清理现有hgsubversion的问题。
什么是最好的方法,我可以纠正问题,而不失去我自己的承诺?(一步一步的指示?)
发布于 2011-03-17 12:20:36
您不能将hg合并推到subversion存储库中,因为SVN无法理解它们。您需要在最新的SVN提交的基础上重新调整您的更改。
编辑步骤来平平历史记录:
警告,准备好进行大量合并冲突。
您需要激活mq和rebase扩展。
第一步是创建一个备份回购,因为您将需要它作为即将到来的合并冲突的参考(预期其中许多冲突)。
假设你的图表是这样的:
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消失了,您的图形如下所示:
C1--C2--C3--B1'--B2'--C5'--C6'--C7'---M2'--
\ /
\--B3'--B4'-B5'-/现在,您对第二个合并:hg rebase -b B3' -d C7'也做了同样的操作,这使您的回购看起来如下:
C1--C2--C3--B1'--B2'--C5'--C6'--C7'--B3''--B4''--B5''重复,直到你有一个全线性版本的历史。
在您平平历史记录之后,您需要在svn提交的基础上重新排序您的提交。假设您的回购现在看起来如下(S=subversion提交,C=local提交):
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«发送当前状态。
https://stackoverflow.com/questions/5336192
复制相似问题