C++ 我应该将.vcxproj.filter文件添加到源代码管理吗?

C++ 我应该将.vcxproj.filter文件添加到源代码管理吗?,c++,visual-studio-2010,visual-studio,version-control,visual-c++-2010,C++,Visual Studio 2010,Visual Studio,Version Control,Visual C++ 2010,在评估Visual Studio 2010 Beta 2时,我看到在转换后的目录中,我的vcproj文件变成了vcproj文件。每个项目旁边还有vcxproj.filter文件,其中似乎包含文件夹结构的描述(\Source files、\Header files等) 您认为这些筛选文件应该按用户保存,还是应该在整个开发组中共享并签入SCC 我目前的想法是让他们登记,但我想知道是否有任何理由不这样做,或者也许有很好的理由让我一定要让他们登记 明显的好处是,如果我查看其他人的机器,文件夹结构将匹配,

在评估Visual Studio 2010 Beta 2时,我看到在转换后的目录中,我的vcproj文件变成了vcproj文件。每个项目旁边还有vcxproj.filter文件,其中似乎包含文件夹结构的描述(\Source files、\Header files等)

您认为这些筛选文件应该按用户保存,还是应该在整个开发组中共享并签入SCC

我目前的想法是让他们登记,但我想知道是否有任何理由不这样做,或者也许有很好的理由让我一定要让他们登记


明显的好处是,如果我查看其他人的机器,文件夹结构将匹配,但他们可能希望逻辑地重新组织内容?

Visual Studio的早期版本(至少6.0版和2008版)将该信息分别存储在他们自己的项目文件(.dsp和.vcproj文件)中,当然,添加到SCC中是很好的


我想不出任何理由不将此.filter文件包含在SCC中,我们故意删除了.filter。当我们转换为.vcxproj MSBuild格式时,文件信息将从.vcproj中删除。 一个原因正是您所指出的,过滤器纯粹是一个逻辑视图,不同的团队成员可能需要不同的视图。
另一个是,有时构建被设置为检查项目文件的时间戳,如果它发生了更改,就会触发重建-因为这可能意味着要构建不同的源文件,或者不同的设置,等等。我不记得我们是否真的以这种方式提供了构建触发,但我们的想法是,我们不想仅仅因为过滤器发生了更改就触发重建,因为它们不会影响构建。

我刚刚发现,如果使用Git,可以将.filter文件标记为合并的联合,以使其更简单。只需添加一行:

*.vcxproj.filters merge=union
到您的.gittributes文件


有关更多详细信息,请参阅。

如果您使用
CMake
(或类似构建工具)生成文件,如
*.sln
*.vcxproj
*.vcxproj.filters
等,则不应添加该文件,因为该文件可能包含指向您的项目文件夹以及其他仅指向您计算机特定文件夹的完整路径。

我支持您。我登记了。谢谢对于自动重建,如果有任何文件发生了更改(例如源代码),您就可以进行构建,因此现在除了我们还有一个文件要管理外,没有任何更改。我们最终将它们签入,并且到目前为止对这种安排很满意。如果其他开发人员有相同的过滤器结构,我们与他们一起工作会更好。我将分别对待他们。就我而言,作为项目状态的一部分必须保留的垃圾越少越好,所以我认为这是一个好的决定。如果我们不想使用任何抽象/逻辑树,而只想看到普通的文件系统树,我们可以完全禁用这些过滤器吗?@JohanBoule:我完全同意!他们应该在IDE中废弃过滤器。已经有了一个逻辑树结构,它被称为“文件系统”。目前存在大量重复--每个文件都必须添加到文件系统、构建脚本(vcxproj)、过滤器(vcxproj.filters)、源代码管理,或者其他地方。它违反了干燥原则。幸运的是,过滤器文件似乎是可选的。您可以删除它们并使用IDE中的“显示所有文件”按钮。遗憾的是,这不是默认设置。上面提到的链接没有说明这一点。过滤器文件应该在gitattributes文件中提到“union”。但它说明了
merge=union
的作用-没有承诺任何其他内容。有了这些知识和对*.filter文件外观的非常广泛的了解,很容易看出为什么
merge=union
对这些文件是个好主意。