合并Visual C++ 2012项目过滤器时如何防止系统冲突?

Lau*_*dou 6 merge merge-conflict-resolution visual-studio-2012 visual-c++-2012

将新文件添加到Visual C++项目时,IDE会将它们添加到两个位置:

  • 主项目文件(例如myproject.vcxproj)
  • 项目"过滤器",解决方案资源管理器的虚拟路径的存储库(例如myproject.vcxproj.filters)

合并文件添加对主项目文件来说不是问题,但它通常是过滤器冲突的根源.问题来自于IDE总是在过滤器列表的最末端添加新元素.

为了说明这个问题,我们假设过滤器最初看起来像这样:

1 <ClInclude Include="fs\path\oldFile1.h">
2   <Filter>virtual\path</Filter>
3 </ClInclude>
4 <ClInclude Include="fs\path\oldFile2.h">
5   <Filter>virtual\path</Filter>
6 </ClInclude>
Run Code Online (Sandbox Code Playgroud)

然后程序员A添加newFileA.h并提交,过滤器更新如下:

1 <ClInclude Include="fs\path\oldFile1.h">
2   <Filter>virtual\path</Filter>
3 </ClInclude>
4 <ClInclude Include="fs\path\oldFile2.h">
5   <Filter>virtual\path</Filter>
6 </ClInclude>
7 <ClInclude Include="fs\path\newFileA.h">
8   <Filter>virtual\path</Filter>
9 </ClInclude>
Run Code Online (Sandbox Code Playgroud)

如果程序员B还添加了一个newFileB.h并且在头版本上同步的注释,那么他的本地过滤器副本将如下所示:

1 <ClInclude Include="fs\path\oldFile1.h">
2   <Filter>virtual\path</Filter>
3 </ClInclude>
4 <ClInclude Include="fs\path\oldFile2.h">
5   <Filter>virtual\path</Filter>
6 </ClInclude>
7 <ClInclude Include="fs\path\newFileB.h">
8   <Filter>virtual\path</Filter>
9 </ClInclude>
Run Code Online (Sandbox Code Playgroud)

试图与程序员A的变化同步将系统地引起程序员B的第7-8-9行的合并冲突.这是因为变化恰好发生在完全相同的位置.

有没有办法防止这个问题发生,无论是通过Visual Studio中的配置更改,某些合并工具(最好是 Araxis Merge或Beyond Compare)的特殊选项,还是其他任何东西?

MJD*_*MJD 1

基于这个问题,听起来过滤器对于 Visual Studio 的功能来说并不是必需的。您是否尝试过不提交过滤器文件,而是让每个人都有自己的文件?我不使用VS,所以我不知道这些文件是做什么的,或者哪些功能不会同步。但是,我通常不建议在 IDE 特定文件中提交,因为它们通常会针对不同的用户进行更改,并且无论如何都是冲突的根源。