Notes:
Fundamentally version control is about being able to manage versions of work. This includes reproducing versions of the work, querying differences between versions and applying the changes made between two versions to be applied to a third. For software development the contents of files, the files and the directory structure need to be managed.
I want a version system to manage the changes that I make without putting obstructions my way. Ideally I just want to make changes to my working copy of the system and for any interaction of these with the shared development and/or release versions of the system to be resolved automatically. Within my working copy I'd like to be able to answer queries such as "what did I change this morning?" and be able to "undo all my changes to this file" or "undo the changes I made last Friday afternoon (without losing any other changes)".
Whether working as an individual developer, in quality assurance, or as a release manager I want to be in control of when the changes other people make impact my working copy. I want to select specific changes and have all necessary updates applied.
Each piece of development takes place in isolation on a branch managed by CVS. When the work is completed the developer merges into the current version of the whole system, builds and tests the results and then commits the changes.
To trap any problems I built the trunk every day, and for convenience hosted the resulting javadocs via the webserver on my PC.
I've described the use of CVS elsewhere – See Overload 44. or:
http://www.octopull.co.uk/VCS/