Version Control – Should Framework Runtimes Be Stored Under Source Control?

version control

I know a lot of software shops keep binaries under source control. However, our shop had come to store entire frameworks on the repository: DirectX runtime, CUDA, nVidia Optix, whatever.

It is said to make a dev machine setup easier (supposedly, get latest and start coding). However, it considerably bloats the repository and burdens it with irrelevant history.

I've never seen such a usage pattern. Do you consider it a good practice?

[EDIT:] I have no problem with source-controlling isolated 3rd party binaries. The question refers to entire framework runtimes, typically consisting in 10+ binaries. As an extreme example, take Windows SDK (which we don't keep on the repository, thank god, but I see no difference in principle).

Best Answer

Binaries are generally not well suited for version control system because:

  • they don't benefit from version control features (merge, diff)
  • they increase the size of the repo...
  • ... which matters because you don't remove easily a version from a VCS (VCS are made to keep the history), as opposed to artifact repositories like Nexus, which are simple shared directories (easy to clean up: cd + rm!)
  • they should be referenced in a VCS as a text, a declaration of path+version: you can keep relevant history that way, recording any change of binary version as a change in that text file (like a pom.xml if you are using Nexus for instance)