Version Control with Subversion, 2nd Edition
by C. Michael Pilato, Ben Collins-Sussman, Brian W. Fitzpatrick
Versioning Models
The core mission of a version control system is to enable collaborative editing and sharing of data. But different systems use different strategies to achieve this. It’s important to understand these different strategies, for a couple of reasons. First, it will help you compare and contrast existing version control systems in case you encounter other systems similar to Subversion. Beyond that, it will also help you make more effective use of Subversion, since Subversion itself supports a couple of different ways of working.
The Problem of File Sharing
All version control systems have to solve the same fundamental problem: how will the system allow users to share information but prevent them from accidentally stepping on each other’s feet? It’s all too easy for users to accidentally overwrite each other’s changes in the repository.
Consider the scenario shown in Figure 1-2. Suppose we have two coworkers, Harry and Sally. They each decide to edit the same repository file at the same time. If Harry saves his changes to the repository first, it’s possible that (a few moments later) Sally could accidentally overwrite them with her own new version of the file. Although Harry’s version of the file won’t be lost forever (because the system remembers every change), any changes Harry made won’t be present in Sally’s newer version of the file, because she never saw Harry’s changes to begin with. Harry’s work is still effectively lost—or is at least missing from the latest version ...