6

将新文件添加到 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),还是其他什么?

4

1 回答 1

1

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

于 2013-10-20T05:01:36.543 回答