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:
- Visual SourceSafe
Some "whole-repository" version control systems:
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?