Version Control
From DesigningPatterns
General Characteristics
- Most systems provide some support for "lock, modify, and unlock" semantics. RCS only provides these semantics. Clearcase provides these semantics within views.
- This model can serialize development because developers become blocked waiting for other developers to finish with a file.
- Some systems provide support for "copy, modify, and merge" semantics, including CVS, Clearcase, and Subversion.
- Merges can be tricky.
Concepts
- The trunk is the latest version of the software (it may be unstable).
- A branch is forked from the trunk for specific development activities and then, when development is finished, merged back into the trunk.
- A tag is a branch tagged with meaningful context ("version 1.0", for example).
Packages
Designing Patterns uses Subversion for several reasons:
- It is used quite widely in the open source world and so has a large set of associated tools and documentation (including an excellent and free online book).
- The price is unbeatable.
- Its feature set has many of the same features that are present in commercial packages, such atomic changeset commits and versioning of directories.
- It can be used transparently across a network.
- It is a centralized version control system, and the Designing Patterns founders are most familiar with this kind of tool (having extensive experience with Clearcase). In addition, right now the development activities of Designing Patterns do not play into the strengths of a distributed version control system (git, for example; we currently do not have any projects with a large number of geographically separated developers).
