cvs2git

May 8, 2014

I needed to convert a CVS repository into a GIT repository. This can be done using cvs2git, given file level access to the CVS repository.

The following process worked for me. I downloaded the latest version (2.4) from http://cvs2svn.tigris.org/servlets/ProjectDocumentList?folderID=2976&expandFolder=2976&folderID=3984

I then built and installed it using:

$ cd cvs2svn-trunk
$ make man
$ make install

This was version 2.4.0:

$ cvs2git --version
cvs2git version 2.4.0

The following command took a few hours on my 5Gb repository:

$ cvs2git --blobfile=cvs2git/git-blob.dat --dumpfile=cvs2git/git-dump.dat DCSLIVE --username=cvs2git --encoding latin_1

DCSLIVE was the directory containing the CVS repository.

The --encoding option was added after an initial run failed to parse all the commit comments correctly.

Once this is done, you'll have two files git-blob.dat and git-dump.dat. These can be imported into a new repository:

$ git init --bare repos/dcslive.git
Initialized empty Git repository in /apps/repos/dcslive.git/
$ 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

References

Tags: cvs git cvs2git