将新文件添加到 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>
然后程序员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>
如果程序员 B 还添加了一个newFileB.h
并在 head 修订上同步了注释,他的过滤器的本地副本将如下所示:
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>
尝试与程序员 A 的更改同步将系统地引发程序员 B 在第 7-8-9 行的合并冲突。这是因为更改恰好发生在完全相同的位置。
有没有办法防止这个问题发生,无论是通过 Visual Studio 中的配置更改,一些合并工具的特殊选项(最好是 Araxis Merge 或 Beyond Compare),还是其他什么?