代码之家  ›  专栏  ›  技术社区  ›  Edward Strange

VS2010.filter文件和SVN

  •  6
  • Edward Strange  · 技术社区  · 14 年前

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

    不幸的是,现在每次签入时,如果有人将文件或筛选器添加到项目中,就会出现合并冲突。SVN似乎完全无法正确合并此文件类型,即使它是基于文本的。越来越令人沮丧了。

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

    <?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>
    
    4 回复  |  直到 14 年前
        1
  •  1
  •   Eamon Nerbonne    14 年前

    它们是普通的xml文件,就像VisualStudio的其他项目文件一样-我不明白为什么它们应该是任何xml文件 更多 比其他项目文件更容易发生冲突。

    这些文件可能被视为二进制文件而不是文本文件吗?合并二进制文件不起作用-请检查svn属性以查看它们设置为什么mime类型(如果未设置mime类型,则可以)。如果设置了mime类型,则可能是因为配置错误 automatic property .

    你绝对不应该 svn:ignore 这些文件。

        2
  •  2
  •   the_mandrill    11 年前

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

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

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

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

       <<<<<
       <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>
    

    <CLCompile> :

       <ClCompile Include="dir1\newfile1" />
    

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

    <CLCompile> <CLInclude> 、筛选器和结束标记。

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

        3
  •  0
  •   Michael Aaron Safyan    14 年前

    svn propset svn:ignore '.filters' .
    

    上面的命令将使Subversion开始忽略对名为“.filters”的文件的更改。

    另一种选择是强制Subversion将“.filters”文件视为二进制文件:

    svn propset svn:mime-type 'application/octet-stream' .filters
    

    上面的命令将导致“.filters”文件被视为二进制文件,并且不会被合并。

    编辑
    既然您已经解释了“.filters”文件对项目至关重要,而且问题可能是它被视为二进制文件而不是纯文本文件,那么解决方法是将类型设置为纯文本:

    svn propset svn:mime-type 'text/plain' .filters
    
        4
  •  0
  •   DavidRR Chris Brandsma    11 年前

    我会提供这个关于 .vcxproj.filters

    当我使用VisualStudio 2010创建一个C++项目时,它的版本为0.0.40219.1 SP1ReR,它生成一个名为 ReadMe.txt

    <YourProjectName>.vcxproj.filters
        This is the filters file for VC++ projects generated using an Application Wizard.
        It contains information about the association between the files in your project 
        and the filters. This association is used in the IDE to show grouping of files with
        similar extensions under a specific node (for e.g. ".cpp" files are associated with the
        "Source Files" filter).
    

    因此,事实上,这证实了 .vcxproj.过滤器