gpt4 book ai didi

svn - VS2010 .filter 文件和 SVN

转载 作者:行者123 更新时间:2023-12-04 15:37:45 26 4
gpt4 key购买 nike

自从我们切换到 VS2010 后,我们注意到一个新的 .filters 文件,它显然包含项目的过滤器结构。我们还使用 subversion 作为我们的源代码控制。

不幸的是,现在每次我们 checkin 时,如果有人向项目添加文件或过滤器,我们最终都会发生合并冲突。 SVN 似乎绝对无法正确合并这种文件类型,即使它是基于文本的。它变得相当令人沮丧。

还有其他人在处理这个问题吗?有没有人找到解决办法?

示例冲突,编码器“a”添加whatever.txt 并 checkin ,编码器“b”添加过滤器和新的.cpp 文件并更新。得到这个:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="filter_1">
<UniqueIdentifier>{065f6d5d-81b2-4c98-b313-dceb16c24bf2}</UniqueIdentifier>
</Filter>
<Filter Include="filter_2">
<UniqueIdentifier>{85ef5151-d045-4b20-b1bf-e65d380a3cf3}</UniqueIdentifier>
</Filter>
<Filter Include="filter_2\sub_filter_1">
<UniqueIdentifier>{90efdbe3-b53a-41fc-9dfb-147df5e7d7f3}</UniqueIdentifier>
</Filter>
<Filter Include="NewFilter1">
<UniqueIdentifier>{8162b584-12a0-4a05-8cc5-ede4ced07ba3}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="filter_2\file_3.hpp">
<Filter>filter_2</Filter>
</ClInclude>
<ClInclude Include="filter_2\sub_filter_1\file_4.hpp">
<Filter>filter_2\sub_filter_1</Filter>
</ClInclude>
<ClInclude Include="filter_1\file_1.hpp">
<Filter>filter_1</Filter>
</ClInclude>
<ClInclude Include="filter_1\file_2.hpp">
<Filter>filter_1</Filter>
</ClInclude>
</ItemGroup>
<<<<<<< .mine
<ItemGroup>
<ClCompile Include="whatnot.cpp">
<Filter>NewFilter1</Filter>
</ClCompile>
</ItemGroup>
=======
<ItemGroup>
<None Include="whatever.txt" />
</ItemGroup>
>>>>>>> .r12513
</Project>

最佳答案

我们遇到了同样的问题。这与由于文本/二进制状态而未正确合并它们无关,而是因为 SVN 合并的怪癖。

通常,如果一个人向项目添加一个新文件并提交,那么差异将类似于:

   <ClCompile Include="dir1\newfile1">
<Filter>dir1</Filter>
</ClCompile>

同时,user2 向同一个过滤器(即解决方案树中的文件夹节点)添加了一个新文件:
   <ClCompile Include="dir1\newfile2">
<Filter>dir1</Filter>
</ClCompile>

当 user2 更新时,它们会发生冲突
   <<<<<
<ClCompile Include="dir1\newfile1">
=====
<ClCompile Include="dir1\newfile2">
>>>>>>
<Filter>dir1</Filter>
</ClCompile>

关键是你如何解决冲突。如果您使用合并工具的“先使用 A 然后使用 B”选项,那么您最终会得到以下结果:
   <ClCompile Include="dir1\newfile1">
<ClCompile Include="dir1\newfile2">
<Filter>dir1</Filter>
</ClCompile>

这是无效的 XML。不幸的是,VisualStudio 似乎并不总是提示这一点(尽管它通常会提示——似乎取决于更改的确切性质)。所以你可以最终得到一些从过滤器中孤立的文件——我认为在这种情况下它会尝试通过完成第一个 <CLCompile> 来修复它。 :
   <ClCompile Include="dir1\newfile1" />

这意味着 newfile1 将出现在项目的顶层而不是 dir1 过滤器中。一旦出现一些无效节点,似乎您将开始遇到更多冲突,直到有人修复项目。

所以,这一切的解决办法是,你需要让用户在解决冲突时了解文件的结构,不要一味地依赖合并工具。您必须确保每个条目都包含所有 3 行:开头 <CLCompile><CLInclude> 、过滤器和结束标记。

由于 xml 的一个怪癖,这整个问题才真正存在,因为冲突只会影响三行中的一两行。如果 XML 结束标记与过滤器在同一行,则不会发生这种情况。

关于svn - VS2010 .filter 文件和 SVN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2700602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com