How to migrate CVS repositories to Plastic SCM

April 18, 2013

In this entry I will try to explain you how to migrate CVS repositories into Plastic SCM with two examples.

Things we need:

    A CVS repository
    Git installed
    Plastic SCM

  • OPTION 1: Using git cvsimport command, and then exporting from git to Plastic.
  • First of all, we have to be sure CVSROOT environment variable points to the CVS repository directory. A good choice is:

    setenv CVSROOT /usr/local/src/cvsroot

    You may need to checkout a repository from your server or a collaborating web like Sourceforge :

    cvs -d :pserver:username@projectname.domain.net:/cvs checkout REPO

    rsync -av rsync://gcgreatcode.cvs.sourceforge.net:/cvsroot/gcgreatcode/* gcode

    Once we have the CVS repository in a local folder, we have to create a new folder in order to store the git repository.

    mkdir gcode-git
    cd gcode-git
    

    Now we are ready to execute the first import command which is “git cvsimport” . A “.git” folder will be generated.

     git cvsimport  -v -d :local:/home/plastic/Downloads/gcode GC

    We need to provide the repository path and repository name. In the example the correct information is “/home/plastic/Downloads/gcode” for the path and “GC” for the repository name.

    Now, if we execute the “git branch” command, we can check that all the branches are correctly exported to git.

    We have now our repository inside git. At this point, we only have to create a git fast-export file, and import the file to Plastic SCM (same as we did with Mercurial migration), indicating the Plastic SCM server and repository name we want to create.

    git fast-export --all -C repo.fe

    cm fast-import myrepo@localhost:8087 repo.fe

  • OPTION 2: Using cvs2git (Tigris project : http://cvs2svn.tigris.org/cvs2git.html), and then exporting from git to Plastic.
  • cvs2svn/cvs2git is a tool that can be used to migrate CVS repositories to newer version control tools, including git. This tool is part of the cvs2svn project. Although cvs2git is considerably newer than cvs2svn, and much less well tested, it is believed that cvs2git can (cautiously) be used for production conversions.

    We can download the lastest version from the http://cvs2svn.tigris.org/cvs2git.html webpage.To install cvs2git from a tarball, simply unpack the tarball into a directory on your conversion computer (cvs2git can be run directly from this directory).

    Before executing the cvs2git tool we have to create a folder to store the results (e.g. cvs2git-tmp) and we also have to create two empty files (“git-blog.dat” and “git-dump.dat”). Those files will be used by the tool to store the result and the migration data. We execute cvs2git command indicating the CVS repository path:

    cvs2git \
     --blobfile=cvs2git-tmp/git-blob.dat \
        --dumpfile=cvs2git-tmp/git-dump.dat \
        --username=cvs2git \
        /path/to/cvs/repo
    

    This command will write in the two output files we created in the previous step. Next step, is to create an empty git repository in a new folder and initialize it:

    mkdir myproject.git
    cd myproject.git
    git init –bare
    

    This way we can load the dump files into the new git repository using the git fast-import command:

    git fast-import --export-marks=../cvs2git-tmp/git-marks.dat < ../cvs2git-tmp/git-blob.dat
    git fast-import --import-marks=../cvs2git-tmp/git-marks.dat < ../cvs2git-tmp/git-dump.dat
    

    On Linux/Unix this can be shortened to:

    cat ../cvs2git-tmp/git-blob.dat ../cvs2git-tmp/git-dump.dat | git fast-import

    Finally, as we saw in Option 1 example, we only have to create a git fast-export file and import it to Plastic:

    git fast-export --all -C repo.fe
    cm fast-import myrepo@localhost:8087 repo.fe
    

    And that's all! Now, it´s your turn to decide which option you prefer to migrate your repositories.



    2 comments :

    SilverKnight said...

    For all the Windows users out there - this ONLY works with the Cygwin GIT release. The msysgit doesn't support the cvsimport command in the Windows port.

    Also, for cranky CVS repos, it may be necessary to use the actual CVS/CVSNT executable if the internal -cvsimport command fails.

    If you know how to use Linux, you are probably better off using the Linux client as indicated in this blog.

    @codicesoftware
    Thanks for putting together these instructions!

    calbzam said...

    @SilverKnight Thanks for your comment for Windows users.
    If possible I would also recommend to perform the migration using Linux

    Real Time Web Analytics