哪些Visual C++文件类型应该提交到版本控制?

183

哪些 Visual Studio\Visual C++ 文件类型应该提交到版本控制?
在我的项目中,我有以下文件类型:

aps
cpp
exe
filters
h
ico
idb
ipch
lastbuildstate
lib
log
manifest
obj
pch
pdb
rc
rc2
res
sdf
sln
suo
tlog
txt
user
vcxproj
我非常希望每种文件类型都能简要说明其用途,如果有任何争议,请注明。为了完整起见,我故意包括了甚至是微不足道的文件类型。
编辑:
一方面,将来我希望平台无关。另一方面,在不久的将来,我希望与具有类似设置的团队成员合作。设置之间的文件夹兼容性肯定是一个选择,因此,如果它能简化工作流程,可以包含保存路径的配置文件。同样,我肯定会感激对各个文件类型的解释。

27
哇,这个问题真正证明了VS在项目目录中坚持创建临时文件的数量正在增长。 - Nik Reiman
@Nik:它们不在项目目录中。 - Hans Passant
1
@Hans,它们要么在那里或者在项目的子目录下。 - Nik Reiman
@Nik:不是msbuild的东西。我想你指的是临时文件。我同意,这不太好看。 - Hans Passant
6
我邀请你尝试使用赛灵思的ISE开发环境(用于硬件描述语言编程),看看它会生成多少临时文件。成百上千个带有许多扩展名的文件,真是一团糟。相比之下,Visual Studio非常简洁。 - Mark Lakata
将 .VC.db 加入“不”列表,不进行版本控制。根据 https://dev59.com/zmEi5IYBdhLWcg3wN6Nt#21622361 的说法,这似乎是一种由 IntelliSense 用作临时缓存的 sql-lite 数据库。 - buzz3791
8个回答

243

是:

  • cpp: 源代码
  • filters: 项目文件
  • h: 源代码
  • ico: 资源
  • rc: 资源脚本
  • rc2: 资源脚本
  • sln: 项目文件
  • txt: 项目元素
  • vcxproj: 项目文件

不是:

  • aps: 上次资源编辑器状态
  • exe: 构建结果
  • idb: 构建状态
  • ipch: 构建助手
  • lastbuildstate: 构建助手
  • lib: 构建结果。可以是第三方
  • log: 构建日志
  • manifest: 构建助手。可以自己编写
  • obj: 构建助手
  • pch: 构建助手
  • pdb: 构建结果
  • res: 构建助手
  • sdf: 智能感知数据库
  • suo: 解决方案用户选项
  • tlog: 构建日志
  • user: 调试设置。如果只有一个开发人员或自定义的调试设置,请保留。

其中一些文件可能需要斟酌,因为它们既可以自动生成,也可以手动维护。还有一些文件没有列在您的清单中。主要是关注文件的位置。如果在您的解决方案或项目目录中,则极有可能需要将其检入。如果在Debug或Release子目录中,则极不可能。构建+清理会删除许多噪音文件。当然:检入、重命名项目目录、检出并验证构建。


这非常有用。我的项目也有一个 .vcb 文件(该项目是从旧版本(eVC)转换而来,因此可能与此相关)。 - Robbie Matthews
1
“.vcxproj.filters”文件怎么办? - John Alexiou
1
同时,对于.OPENSDF文件也不支持。 - Zam
1
自从答案的第一个修订以来,@ja72的“filters”已经在“yes”列表中了。 - Asteroids With Wings

27

从你的列表中,我会选择这些:

cpp
filters
h
ico
manifest
rc
rc2
sln
txt
vcxproj

通常情况下,您应该对构建项目所需的所有文件进行版本控制。在我看来,不应该归档自动生成的文件。


@milan1612 感谢您提供简明的清单。与Hans Passant的回答相比,您说我应该提交清单文件,而他则表示我不应该这样做。您能否详细说明一下这个文件的含义以及为什么您认为我应该提交它,特别是在团队(和未来跨平台)环境中,如果相关的话? - Jonathan Livni
3
清单文件可以有不同的用途。我曾经手动创建了一个清单文件,并将其包含在资源文件中,导致Windows对我的窗口应用样式。此外,还有一些清单文件可以使您能够将标准库dll与可执行文件一起部署。可以将其视为关于您的应用程序的元数据... - Milan
@milan1612 - 我遇到了一个额外的类型 - 锁(suo),这是否也应该被添加?如果是,能否为了完整性将其添加到您的列表中? - Jonathan Livni
@milan1612 - 更多类型 - sbr,opensdf,ilk,bsc - Jonathan Livni
3
@sJonathan, suo 文件中存储了与解决方案相关的开发人员专用数据(例如打开的文件或在“解决方案资源管理器”中打开/折叠的文件夹)。因此,它不应该被纳入版本控制。 - Daniel Rose
1
@milan1612 - 根据Daniel Rose的建议,您能从您的列表中删除suo吗? - Jonathan Livni

18

根据微软的建议,应该包括在版本控制中的文件类型:

.mak、.dsp、.c、.rc、.rc2、.ico、.bmp、.txt、.def、.hpj、.bat、.rtf、.odl、.inf、.reg、.cnt、.cpp、.cxx、.h、.hpp、.hxx、.inl、.tpl、.vtp 和 .mst...

不应该包括在版本控制中的文件类型:

.pch、.mdp、.ncb、.clw、.obj、.exe、.aps、.cpl、.awk、.exp、.lib、.idb、.opt、.pdb、.map、.res、.ilk、.scc、.bsc、.sbr、.dll 和 .tlb...

但如果使用外部工具的exe文件或外部库,则我认为也应该包含在版本控制中。

信息:应将哪些Visual C++文件添加到源代码控件中

此外,此链接描述了Visual Studio 2017中Visual C++项目的文件类型


7

如果您在项目上右键单击,应该会出现上下文菜单中的“将解决方案添加到源代码控制”选项。

如果您使用此功能,则只会添加必要的文件。所有中间和输出文件都将被忽略。


6
其他答案都非常好,我只是想贡献一下一个有用的小工具。在GitHub上查看Visual Studio .gitignore模板。这是一个很好的积极维护的文件列表,通常会被排除在版本控制之外。
而且,整个gitignore存储库是一个非常有用的资源,适用于各种开发,从ActionScriptZend。如果你不使用Git,仍然可以将gitignore文件用作参考。

1

一般来说,您应该将“解决方案资源管理器”中出现的所有文件添加到版本控制中。此外,您还需要包括 .sln(解决方案文件)和 .vcproj/.vcxproj/.vbproj/.csproj(项目文件)。

请注意,如果您在 Visual Studio 中安装了源代码控制插件,例如 TFS 或 AnkhSvn,则无需显式关注此事。Visual Studio 知道哪些文件需要纳入版本控制,并将数据提供给源代码控制插件。只有当您使用外部工具(如 TortoiseSVN)时才需要这样的列表。


1

只有构建目标所需的文件。

我认为这只是 .cpp .h .ico .rc .txt .manifest .rc2。

我不知道 sdf、aps、filters、user 是什么,也没有在我的 C++ 构建中看到它们。

只需查看并确定它们是否包含程序员编写的代码,或者它们是由 VS 生成的。


4
.sln和.vcxproj是必需的 - 它们描述了项目和解决方案。 - sharptooth
是的,如果你不维护makefiles。很抱歉我个人非常反对VS/MS,以至于我忘记了有人只使用Visual Studio作为他们开发的唯一工具。我只使用调试器。 - Lothar
3
好的,VS项目文件也是Makefile。 - Milan

-2

1
.opt文件控制IDE的外观和感觉,而不是程序编译的方式。因此,你对IDE的感觉并不一定符合其他人的观点。 - phuclv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接