Which Visual C++ file types should be committed to version control?

Visual StudioVisual C++Version ControlFile Type

Visual Studio Problem Overview


Which Visual Studio \ Visual C++ file types should be committed to version control?
In my project I have the following file types:

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

I would greatly appreciate a short reasoning for each. If any of them are controversial, please note it. I'm intentionally including even trivial file types for completeness.

EDIT

On one hand I would like to be platform independent in the future. On the other hand in the near future I would like to work with team members with similar setups. Folder compatibility between the setups is certainly an option, so configuration files holding paths may be included if it eases the workflow.
Again, I would surely appreciate an explanation what's what.

Visual Studio Solutions


Solution 1 - Visual Studio

Yes:

  • cpp: source code
  • filters: project file
  • h: source code
  • ico: resource
  • rc: resource script
  • rc2: resource script
  • sln: project file
  • txt: project element
  • vcxproj: project file

No:

  • aps: last resource editor state
  • exe: build result
  • idb: build state
  • ipch: build helper
  • lastbuildstate: build helper
  • lib: build result. Can be 3rd party
  • log: build log
  • manifest: build helper. Can be written yourself.
  • obj: build helper
  • pch: build helper
  • pdb: build result
  • res: build helper
  • sdf: intellisense dbase
  • suo: solution user options
  • tlog: build log
  • user: debug settings. Do preserve if just one dev or custom debug settings

Several of these are iffy because they can both be auto-generated and maintained yourself. And there are several more that don't appear in your list. Primarily pay attention to the location of the file. If it is in your solution or project directory then it's highly likely you want to check it in. In the Debug or Release subdirectories then highly unlikely. Build + Clean removes a lot of the noise files. And of course: check-in, rename the project directory, check-out and verify that it builds.

Solution 2 - Visual Studio

From your list I'd choose those:

cpp
filters
h
ico
manifest
rc
rc2
sln
txt
vcxproj

Generally, you should version all files necessary to build the project. Automatically generated files should not be archived imho.

Solution 3 - Visual Studio

As suggested by Microsoft, filetypes that should be included in version control:

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

Filetypes that shouldn't be included in:

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

But in case using an external tool in exe file or external library then I think it should also be included in version control

INFO: Which Visual C++ Files to Add to Source-Code Control

In addition, this link describes the File Types for Visual C++ Projects in Visual Studio 2017.

Solution 4 - Visual Studio

If you right click over the project there should be a "Add Solution to Source Control" option in the context menu.

If you use this, only those files that are necessary will be added. All the intermediate and output files will be ignored.

Solution 5 - Visual Studio

The other answers are excellent; I just thought I'd contribute a useful little tool. Check out the Visual Studio .gitignore template on GitHub. It's a nice actively maintained list of files that are commonly kept out of version control.

And while you're at it, the whole gitignore repository is a very useful resource for all sorts of development from ActionScript to Zend. If you don't use Git, you can still use the gitignore files as a reference.

Solution 6 - Visual Studio

In general, you should add all files which appear in the Solution Explorer to version control. In addition, you need to include the .sln (solution file) and .vcproj/.vcxproj/.vbproj/.csproj files (project file).

Note that if you have a source control plugin for Visual Studio, such as TFS or AnkhSvn, there is no need to explicitly care about this. Visual Studio knows which files need to be in version control and gives the data to the source control plugin. Only if you use an external tool (ex. TortoiseSVN) do you need to have such a list.

Solution 7 - Visual Studio

Only the onces that are required for building your target. I think this is just .cpp .h .ico .rc .txt .manifest .rc2

I don't know what sdf, aps, filters, user is, haven't seen them in my C++ builds.

Just look and find out if they contain programmer written code or if they are generated by VS.

Solution 8 - Visual Studio

Contrary to what was stated in an earlier answer, I would like to point out that it appears to be important to version control the .opt file in order to keep track of user options. See reference below:

https://msdn.microsoft.com/en-us/library/aa278994(v=vs.60).aspx

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJonathan LivniView Question on Stackoverflow
Solution 1 - Visual StudioHans PassantView Answer on Stackoverflow
Solution 2 - Visual StudioMilanView Answer on Stackoverflow
Solution 3 - Visual StudiophuclvView Answer on Stackoverflow
Solution 4 - Visual StudioChrisFView Answer on Stackoverflow
Solution 5 - Visual StudioPhilView Answer on Stackoverflow
Solution 6 - Visual StudioDaniel RoseView Answer on Stackoverflow
Solution 7 - Visual StudioLotharView Answer on Stackoverflow
Solution 8 - Visual StudiomitchView Answer on Stackoverflow