What are the advantages of version control systems that version each file separately?
- by Mike Daniels
Over the past few years I have worked with several different version control systems. For me, one of the fundamental differences between them has been whether they version files individually (each file has its own separate version numbering and history) or the repository as a whole (a "commit" or version represents a snapshot of the whole repository).
Some "per-file" version control systems:
CVS
ClearCase
Visual SourceSafe
Some "whole-repository" version control systems:
SVN
Git
Mercurial
In my experience, the per-file version control systems have only led to problems, and require much more configuration and maintenance to use correctly (for example, "config specs" in ClearCase). I've had many instances of a co-worker changing an unrelated file and breaking what would ideally be an isolated line of development.
What are the advantages of these per-file version control systems? What problems do "whole-repository" version control systems have that per-file version control systems do not?