| 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. |
| |
| * To use this script: |
| |
| - 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. |
| |
| - Make sure you have GNU 'sort' installed, or some other sort |
| program that handles large files other than by reading them |
| entirely into memory. |
| |
| - 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', that 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. |