cvs2svn迁移后的svn合并问题
Posted
技术标签:
【中文标题】cvs2svn迁移后的svn合并问题【英文标题】:svn merge problems after cvs2svn migration 【发布时间】:2010-01-29 20:35:59 【问题描述】:我们的团队有一个 cvs 存储库,我们通过 cvs2svn 将其转换为 svn。我们的存储库有一个主分支(让我们调用main
),它有效地用作主干(尽管它在技术上是从过去很远的主干分支出来的)。
cvs2svn 转换后,我将main
分支到branch
。
我在branch
中做了一个小改动,然后尝试将branch
合并回main
:
[~/main] svn merge https:.../branch
这应该计算自分裂发生以来与branch
的差异,并将该差异应用于main
。然而,它可以追溯到几年前,导致无数冲突。
关于如何解决这个问题的任何想法?我搜索了谷歌,但找不到任何东西。
我知道我可以调用 svn merge 并传入准确的修订号。我正在寻找更好的选择。
【问题讨论】:
我认为没有理由怀疑您的问题与 cvs2svn 转换有任何关系。 svn 合并依赖于正确的祖先信息才能正常工作。 cvs 没有该信息,因此 cvs2svn 尝试对其进行猜测。从我读到的内容来看,它通常很好,但在分支分支方面存在问题。 【参考方案1】:您需要告诉 svn merge 您的合并点是什么,以便它知道要同步到 main 的提交范围。由于您没有指定范围,因此它默认为通过 HEAD 修订的提交范围。这会导致修改过多。
这将获得您将从中同步的上一个提交修订:
svn log --xml --stop-on-copy https://.../branch | grep 'revision=' | head -n 1 | sed 's/.*revision="\([0-9][0-9]*\)".*/\1/g'
基本上,这会获得分支上的第一个副本修订版(我将称之为“REV”)。然后将其合并到“主”副本的 HEAD 修订版(在主目录中):
cd main
svn merge https://.../branch:REV https://.../branch:HEAD .
这应该将“分支”副本上从 REV 到 HEAD 的所有更改应用到“主”副本。即使对于从分支到主的重复合并,这也应该可以正常工作。
干杯!
【讨论】:
以上是关于cvs2svn迁移后的svn合并问题的主要内容,如果未能解决你的问题,请参考以下文章