cvs2svn FAQ

    How-to:

  1. How can I convert my CVS repository one module at a time?
  2. How can I convert project foo so that trunk/tags/branches are inside of foo?


How-to:

How can I convert my CVS repository one module at a time?

If you need to convert certain CVS modules (in one large repository) to Subversion now and other modules later, you may want to convert your repository one module at a time. This situation is typically encountered in large organizations where each project has a separate lifecycle and schedule, and a one-step conversion process is not practical.

To incrementally migrate modules contained within a CVS repository to Subversion you will need to use cvs2svn to create a "dumpfile". Then, using svnadmin you will load the dumpfile into a project directory created within the Subversion repository. For example:

  1. Remember to Make a backup before starting. Never run cvs2svn on a live CVS repository--always work on a copy of your repository.
  2. Run cvs2svn against the modules you want converted
          # Copy the CVS modules into a temporary cvs repository.
          # This is not absolutely necessary, but it's for safety's sake.
          $ mkdir ~/newcvsrepo
          $ mkdir ~/newcvsrepo/CVSROOT # needed by cvs2svn
          $ cp -r /oldcvsrepo/module ~/newcvsrepo
          
          # Create a dumpfile containing the new CVS repository contents
          $ mkdir ~/svndump; cd ~/svndump
          $ cvs2svn --dump-only ~/newcvsrepo/module
        
  3. Import the dump into your Subversion repository
          # Make a directory for the project.
          $ svn mkdir file:///path/to/svnrepos/projectA -m "Added projectA directory."
          
          # Use "svnadmin load" to load the dumpfile.
          $ cd ~/svndump
          $ svnadmin --parent-dir projectA load /path/to/svnrepo < cvs2svn-dump
        

How can I convert project foo so that trunk/tags/branches are inside of foo?

Given a CVS repository with the layout:

  /project_a
  /project_b

cvs2svn will produce a Subversion repository with the following layout:

   trunk/
      project_a/
         ...
      project_b/
         ...
   tags/
      ...
   branches/
      ...

However, you may want your Subversion repository to be laid out like this:

   project_a/
      trunk/
         ...
      branches/
         ...
      tags/
         ...
   project_b/
      trunk/
         ...
      branches/
         ...
      tags/
         ...

Currently, cvs2svn does not support converting a repository in this manner (see Issue #86 for details), however, there is a workaround. You can convert your repository one project (or module) at a time and load the individual dumpfiles into your Subversion repository using svnadmin with the --parent-dir switch. See the answer to How can I convert my CVS repository one module at a time? for details.