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合并问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 cvs2svn 工具从 CVS 迁移到 SVN?

cvs2svn 和合并信息

多项目布局中的逐步 cvs2svn 迁移

使用cvs2svn迁移cvs至svn

cvs2svn 修改二进制文件

cvs2svn 2.3.0 在第 16 阶段崩溃