Subclipse合并问题 - Dry run与合并结果不匹配

时间:2012-02-22 16:38:56

标签: java svn version-control merge subclipse

我在Eclipse中使用Subclipse 1.6x插件。让我先解释一下情景:

假设我的项目主干有修订版r1到r100。 在修订版r100,我创建了一个分支并开始提交说r101到r105。 此时,我想我会从trunk中引入任何更改,以便更新我的分支。

但是由于合并错误,我最终将r80从trunk转移到我的分支并将其作为修订版r106。所以我在分支中的r106中恢复了我的更改,并再次向该分支提交r107。

在此期间,已经提交了r108和r 109在行李箱中。 现在在r106中恢复我的错误提交后,我正确地将所有更改从trunk转到r109到我的分支(通过合并)以便我的分支是最新的,并将其作为r110提交给我的分支。

一切都很好。现在我决定我不需要分支,所以让我将分支(r110)中的所有更改合并回主干。因此,在这次合并之后,我应该看到的是我在分支中所做的更改(修改r 101以及稍后在该分支中),因为我的分支与trunk是最新的。

我做一个团队 - >合并From from url作为trunk,To url作为我的分支路径。 From修订版是trunk(r109)中的最后一个合并修订版,使用的To修订版是我的分支(r110)中的最新修订版。我尝试了Dry Run,并在Merge窗口中创建了Unified Diff文件选项。它们看起来都是正确的,唯一更新的文件是我在分支中更改的文件。

现在我运行Merge并且合并结果与Dry Run不同。首先,它正确合并Dry Run显示的文件(这是我的预期)。但它并不止于此。然后尝试这样的事情: ---合并r80到r110(可能是因为我在分支中错误合并了???)

然后执行以下操作: ---反向合并r110到r80。

最终结果是将我的所有更改合并为Dry Run结果以及对其他文件的大量更新/更改(由于第二次合并和反向合并,我猜)。

对于为什么会发生这种情况以及如何使合并结果与Dry Run结果正确/相同的任何想法?甚至创建的Unified diff文件也是正确的。

感谢阅读冗长的帖子。

2 个答案:

答案 0 :(得分:1)

Subversion合并对话框在Subversion 1.5和引入合并跟踪之前还没有进行过。我建议您安装Subclipse更新站点上包含的CollabNet Merge Client插件,看看是否得到相同的结果。

团队>如果安装了此客户端,则合并选项应显示向导。

答案 1 :(得分:0)

好的,我想出了这个或至少解决了我的情况。问题是因为在我的分支上我错误地将r80与trunk合并并作为r106提交。然后我做了团队>还原>最后一次提交以恢复此合并提交并将其作为新提交r107进行检查。

这有两个问题。首先,这不是在SVN中恢复合并提交的最佳方法。 Google了解更多详情。

第二个问题是当您将这些更改(在多次提交中)合并回主干时,SVN将尝试逐个将每个提交应用于主干。当我通过合并r80搞砸了分支上的r106时,由于文件的祖先冲突,SVN对这种变化感到困惑。为了避免这种情况,并告诉SVN不要担心祖先但只是将我的分支中的差异/变化合并到主干,请检查合并窗口中的“忽略祖先”选项。这照顾了我的问题。

另外作为旁注,在SVN合并中,Dry Run的结果相当于在文件之间运行Diff。但是当你进行Merge时,它会调查文件的祖先并逐个引入每个提交来进行Merge。因此,结果可能并不总是相同的。在SVN文档中有更多详细信息。

这是我从我的经验中理解的,并在此发布此答案,因为我没有得到任何其他回复我的帖子。如果我不完全正确,请添加任何评论。