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.
