This is a python script which converts a CVS repository to an SVN Repository. It works by: * using the rcsparse/ module to directly read the CVS repository and deduce commits, * creating a bunch of temporary scratchwork on disk, * replaying all of the commits into an SVN dumpfile, * loading the dumpfile into an SVN repository. Most of the script was written by Greg Stein (gstein@lyra.org) and Daniel Berlin (dberlin@dberlin.org), with tweaks from Marko Macek (Marko.Macek@gmx.net) and Karl Fogel (kfogel@collab.net). The script works reasonably well, with two big caveats: - it doesn't do branches or tags yet - there may be tiny bugs in the way it deduces CVS commits. That said, the script has been used on straightforward CVS repositories with no real problems. As an example, the whole first year of Subversion's own history was converted from CVS into a 3000+ revision svn repository. It took about 30 minutes. * Prerequisites: - Install RCS. cvs2svn uses the "co" command. The RCS home page is http://www.cs.purdue.edu/homes/trinkle/RCS/. - Get at least Python 2.0; see http://www.python.org/. - Make sure you have GNU 'sort' installed, or some other sort program that handles large files other than by reading them entirely into memory. GNU sort is part of the coreutils package, see http://www.gnu.org/software/coreutils/. - If you're not running cvs2svn.py from this directory, then make sure to install the rcsparse/ tree somewhere where Python can find it. Note that it's a CVS working copy, so we can update it easily :-). Except for 'compat.py', which comes from viewcvs/lib/compat.py. Rcsparse is currently part of ViewCVS, see http://viewcvs.sourceforge.net/. Someday rcsparse will be an independent Python project, and then we can depend on it in a more normal way. * Basic usage: To create a new Subversion repository by converting an existing CVS repository, run the script like this: $ cvs2svn.py --create -s NEW_SVNREPOS CVSREPOS To create a Subversion dumpfile (suitable for 'svnadmin load') from a CVS repository, run it like this: $ cvs2svn.py --dump-only --dumpfile DUMPFILE CVSREPOS To see more options, run: $ cvs2svn.py --help