Ken,
Here is part of article I wrote, it should get you started
Once you are ready to move to CVS, there are several decisions that need to be made before proceeding. The first decision is whether or not to keep revision history and log messages. If it seems like an opportune time to baseline your code, maybe you won�t need the history. Should this be the case, a simple copy into your Subversion working directory and commit will load the repository. In the more likely case you decide to keep your history, it is time for the next choice: do you bring branches and tags from CVS into the Subversion repository? Unfortunately, due to constraints in the conversion mechanism, this is all or nothing. Either you get all the tags and branches, or just the trunk.
Subversion has a tool to import an existing CVS repository, including history, branches and tags. This process can get a little dicey depending on your CVS repository. Basically, the more straight forward your CVS implementation, the higher chance of success in the conversion process. If you have a lot of branches and have moved or deleted entries from the CVS repository, you may be in for a long night. The conversion tool is a python script called cvs2svn.py. This script is packaged with Subversion but it is maintained separately. This utility is lagging behind the Subversion code in terms of production worthiness (which could be one of the reasons it is separate). The good news is the tool is being improved at a quick pace. I would recommend getting the latest version before trying to run the conversion. You can check out the script and documentation from collabnet:
svn co
http://svn.collab.net/repos/cvs2svn Once you have the script, take a look at the README and run cvs2svn.py --help. It should not take long to skim through this and be ready to give the conversion a try. The script has the ability to perform a dry run. This will make sure it can properly parse the CVS repository with actually doing the conversion. It is not a bad idea to try this and see if you have any issues before going through the actual conversion. The success and speed of the conversion will depend on many factors. If you hit a snag, here are a few suggestions:
�If possible, run the conversion on the box your CVS repository is on. If you cannot do this, see if you can get a tarball of the repository (maybe from a backup) and create it on your local machine. If you have a big repository, it will be worth the effort.
�Leave braches and tags behind. This is where I have run into the majority of my problems. If you are getting stuck on the braches, try running the conversion with the --trunk-only option. If you need the source from the branches, manually create them in Subversion. You will lose the branch history but not the HEAD history.
�Make sure you have plenty of disk space. The conversion will create a good amount of temporary files.
�Try the conversion first on a
test Subversion repository. If you are adding to an existing SVN repository, you do not want to get half way through and have an error put your existing code in a bad state.
�Create a dump file first. The cvs2svn script can be run to create a Subversion dump file using the --dump-only option. This dump file can be imported into an SVN repository. This is especially useful if you run into problems on the Subversion side. Once you have the dump of the CVS repository, you can use this file instead of reading from CVS each time.