Changes should be committed to the CVS HEAD only when they are in a
working state. The definition of "working" is somewhat liquid; a good
guiding principle is that anyone checking out HEAD should receive a
checkout of working software.
When you want to work on changes that are likely to temporarily break
large swathes of code, you should probably work on a private branch.
Since CVS branching and merging is something of a black art, here are
some simple step-by-step instructions for creating and using a branch.
To create your private branch:
# Get most up-to-date tree before branching
cvs update
# Create a branch called "my-branch"
cvs tag -b my-branch
# Switch working copy to the "my-branch" branch
cvs update -r my-branch
At this point you'll be on a branch called "my-branch". Any changes
you make will not affect people working on HEAD, or on other branches.
Use name for your branch that is both descriptive and unique.
Starting the branch name with your SourceForge username
(e.g. "mcb30-realmode-redesign") is a good idea.
When you want to merge the changes on your branch back into HEAD, do
the following:
# Ensure there are no not-yet-checked-in modifications in your tree)
cvs -q update
# Tag the merge point in the "my-branch" branch
cvs tag -c my-branch-merge-1
# Switch working copy back to HEAD
cvs update -A
# Merge changes from the branch
cvs update -j my-branch
# Commit merged changes to HEAD
cvs commit
If you then want to continue working further on the "my-branch" branch,
do the following
# Switch working copy back to the "my-branch" branch
cvs update -r my-branch
and then when you want to merge some more changes back to HEAD:
# Ensure there are no not-yet-checked-in modifications in your tree)
cvs -q update
# Tag the merge point in the "my-branch" branch
cvs tag -c my-branch-merge-2
# Switch working copy back to HEAD
cvs update -A
# Merge changes from the branch
cvs update -j my-branch-merge-1 -j my-branch
# Commit merged changes to HEAD
cvs commit
Note that the format of the "merge changes from the branch" command has
changed, because this time you need to only merge changes since the last
merge point.
When you have finished with your branch and merged all the changes
back to HEAD, simply stop using the branch.