Jon*_* L. 7 svn mercurial hgsubversion
我正在研究一个主要使用SVN的团队,而我更喜欢在可能的情况下使用Mercurial.我使用hgsubversion设置了一个SVN repo的hg克隆,并且几个基本的pull/commits/push似乎运行正常.
现在经过2周的本地开发(在此期间我合并了来自外部hg repo的更改,并且多次从SVN repo合并更改),我试图推送到SVN repo,但是失败了信息:
abort:抱歉,找不到合并修订版的svn parent.
我发现其他用户遇到了同样的问题,如何避免这个问题的进展,但我没有遇到任何似乎解决凝聚多个并行提交以清理现有的hgsubversion repo.
在不丢失自己的提交的情况下,我可以纠正问题的最佳方式是什么?(使用分步说明?)
您无法将hg合并推送到subversion存储库,因为SVN无法理解它们.您需要在最新的SVN提交之后重新定义更改.
编辑步骤以展平历史记录:
警告,准备做很多合并冲突
您需要激活mq和rebase扩展名
第一步是创建备份仓库,因为您将需要它作为即将发生的合并冲突的参考(期望其中许多冲突).
假设您的图表如下所示:
C1--C2--C3------M1--C5--C6--C7---M2--
\ / \ /
\--B1--B2--/ \--B3--B4-B5-/
Run Code Online (Sandbox Code Playgroud)
然后第二步是在C3之上修改B1 + B2: hg rebase -b B2 -d C3
-b使用两个分支的公共基础作为分支的开始,因此mercurial发现B1是第一个偏差提交,即使你说B2到rebase也使用它.
-d指定重新分支的目的地.
你遇到合并冲突然后确保B2'= M1的结果,否则你将在以下修订中遇到很多冲突.
之后Merge M1消失了,你的图表看起来像这样:
C1--C2--C3--B1'--B2'--C5'--C6'--C7'---M2'--
\ /
\--B3'--B4'-B5'-/
Run Code Online (Sandbox Code Playgroud)
现在你为第二次合并做同样的事情:hg rebase -b B3' -d C7'这使你的回购看起来像这样:
C1--C2--C3--B1'--B2'--C5'--C6'--C7'--B3''--B4''--B5''
Run Code Online (Sandbox Code Playgroud)
重复,直到您拥有所有线性版本历史记录.
在平铺了历史记录之后,您需要在svn提交之上重新排序提交.说你的repo现在看起来像这样(S = subversion commit,C = local commit):
S1--S2--S3--C1--C2--S4--S5--C3-C4--C5--C6--C7--S6--S7
Run Code Online (Sandbox Code Playgroud)
现在将所有内容从(包括)C1导入到一个mercurial队列(hg qimport -rC1:)中.要查看所有创建的修补程序使用hg qseries.
然后你取消应用所有补丁(hg qgoto C1.diff [this is the first one in qseries],然后是hg qpop).然后你删除颠覆的(hg qdelete S4.diff S5.diff S6.diff S7.diff).
现在是时候重新获取svn commits(hg pull »svn-remote«)了.然后,您逐个重新应用所有本地修补程序,hg qpush并修复当前正在发生的所有合并冲突.当您完成一个冲突时,您可以将当前补丁移动到mercurial commit中hg qfinish -a,并将当前状态发送给hg push »svn-remote«.
| 归档时间: |
|
| 查看次数: |
974 次 |
| 最近记录: |