我已经从我的主干创建了一个名为“feature3”的分支。我对“feature3”分支上的文件进行零修改。在trunk上也没有对文件进行修改。使用TortoiseCVS(TortoiseSVN 1.6.6,Build 17493 - 32 Bit)对SVN(版本1.6.3(r38063))repo,我选择了“Reintegrate a branch”选项启动“合并”。
此命令的输出显示合并的80个文件。这些文件唯一改变的是svn:mergeinfo属性。但为什么只有这80个文件呢?我在项目中有数百个其他文件没有更改此属性。
以下是对单个文件
上的svn:mergeinfo属性进行更改的示例在:
/trax/branches/current/Libraries/Security/Specifications/NotSpecification.cs:10292-10783 /trax/branches/feature1/Libraries/Security/Specifications/NotSpecification.cs:11324 /trax/branches/feature2/Libraries/Security/Specifications/NotSpecification.cs:11326 /trax/branches/int/Libraries/Security/Specifications/NotSpecification.cs:11232-11314 /trax/branches/next/Libraries/Security/Specifications/NotSpecification.cs:10156-10782 /trax/branches/trax-1.0.x/Libraries/Security/Specifications/NotSpecification.cs:10191-10291 /trax/branches/upgrade/Libraries/Security/Specifications/NotSpecification.cs:9964-10604 /trax/tags/trax-1.0.0/Libraries/Security/Specifications/NotSpecification.cs:10178-10190 /trax/trunk/Libraries/Security/Specifications/NotSpecification.cs:6672-9851,11232-11325
在
/trax/branches/current/Libraries/Security/Specifications/NotSpecification.cs:10292-10783 /trax/branches/feature1/Libraries/Security/Specifications/NotSpecification.cs:11324 /trax/branches/feature2/Libraries/Security/Specifications/NotSpecification.cs:11326 /trax/branches/feature3/Libraries/Security/Specifications/NotSpecification.cs:11328-11334 /trax/branches/int/Libraries/Security/Specifications/NotSpecification.cs:11232-11314 /trax/branches/next/Libraries/Security/Specifications/NotSpecification.cs:10156-10782 /trax/branches/trax-1.0.x/Libraries/Security/Specifications/NotSpecification.cs:10191-10291 /trax/branches/upgrade/Libraries/Security/Specifications/NotSpecification.cs:9964-10604 /trax/tags/trax-1.0.0/Libraries/Security/Specifications/NotSpecification.cs:10178-10190 /trax/trunk/Libraries/Security/Specifications/NotSpecification.cs:6672-9851,11324-11327
更改是添加了这一行
/trax/branches/feature3/Libraries/Security/Specifications/NotSpecification.cs:11328-11334
并修改了最后一行
/trax/trunk/Libraries/Security/Specifications/NotSpecification.cs:6672-9851,11324-11327
我预计合并会导致合并零文件。 为什么SVN会认为这些文件需要合并并且他们的svn:mergeinfo属性发生了变化?有没有办法纠正这个问题?
这是我应该删除所有80个文件的svn:mergeinfo属性的情况吗?我暗指here和here。
这个简单的例子是一个大型调查的一部分,我在其中创建一个功能分支,进行多处更改,然后尝试将更改合并回主干。但是,合并通知我在这80个文件上存在多个树冲突。由于所有这些树冲突,我无法使用SVN分支,这一点非常令人沮丧。
答案 0 :(得分:12)
但为什么只有这80个文件?
这些文件具有svn:mergeinfo
属性;其他人没有。当单个文件和项目子文件夹具有此功能时,它将被称为“子树mergeinfo”。一旦文件或文件夹具有“svn:mergeinfo”属性,mergeinfo将在每次合并操作时更新。
如果仅合并项目的根目录,并使用最新版本的SVN客户端,则很少会看到子树mergeinfo。只有项目分支的根文件夹(例如/trunk
,/branches/foo
)应具有svn:mergeinfo
属性。
编辑:如果您只是删除子树mergeinfo,那么subversion不知道合并发生了。作为一个消息,subversion可能会尝试再次合并这些修订,只要让它选择符合自动合并条件的修订版(例如,当您执行svn merge
而没有指定-r
或-c
选项时)。在最坏的情况下,这种合并尝试可能会产生一些虚假的冲突,这不是一个大问题;只需手动解决它们。
更新:Subversion 1.7现在只在必要时更新mergeinfo。来自release notes:
如果子树不受合并的影响,则合并不再在子树(具有自己的显式mergeinfo)上记录mergeinfo(描述合并)。这应该大大减少具有显式mergeinfo的具有大量子树的用户的虚假svn:mergeinfo属性更改的数量。
答案 1 :(得分:4)
以上可能是您有时获得该类型的mergeinfo行为的最佳起点参考。 Submerged blog有一些ESSENTIAL svn合并存储在其中的知识。
虽然我没有看过下一篇文章,但这篇文章对你也有帮助: