Converting CVS to Git, with branches
There are quite a number of tools to convert a CVS repository to a Git repository out there. However, most of them don’t seem to be able to copy over the branches properly. A work around is to convert it to Mercurial first, then convert it to Git.
In this example I’m using a repository called RedDog.
First, we need to get Mercurial on the system.
yum install mercurial
Next we need to add the convert extension to the .hrc file. This might be a global file, or might be in your home directory, can’t quite remember.
[extensions]
hgext.convert=
Check out from CVS and convert to Mercurial.
cvs checkout RedDog
hg convert RedDog
This will create a Mercurial repository called RedDog-hg. Now we need to get hold of Fast Export.
git clone git://repo.or.cz/fast-export.git
Once we have the software we can initialise a new Git repository that we’re going to use and then CD into the folder.
git init RedDog-git
cd RedDog-git
Run the Fast Export tool, specifying the location of the Mercurial repository.
../fast-export/hg-fast-export.sh -r ../RedDog-hg
This will migrate everything into your new Git repository. If you run an ls -a you should see the .git folder, which you may want to rename to RedDog.git (something.git locations are actually just .git directories).
You may optionally also want to do a check out into that folder.
git checkout HEAD
However, you don’t have to – you can begin using it remotely without doing a local checkout.
There are quite a number of tools to convert a CVS repository to a Git repository out there. However, most of them don’t seem to be able to copy over the branches properly. A work around is to convert it to Mercurial first, then convert it to Git.
In this example I’m using a repository called RedDog.
First, we need to get Mercurial on the system.
yum install mercurial
Next we need to add the convert extension to the .hrc file. This might be a global file, or might be in your home directory, can’t quite remember.
[extensions] hgext.convert=
Check out from CVS and convert to Mercurial.
cvs checkout RedDog hg convert RedDog
This will create a Mercurial repository called RedDog-hg. Now we need to get hold of Fast Export.
git clone git://repo.or.cz/fast-export.git
Once we have the software we can initialise a new Git repository that we’re going to use and then CD into the folder.
git init RedDog-git cd RedDog-git
Run the Fast Export tool, specifying the location of the Mercurial repository.
../fast-export/hg-fast-export.sh -r ../RedDog-hg
This will migrate everything into your new Git repository. If you run an ls -a you should see the .git folder, which you may want to rename to RedDog.git (something.git locations are actually just .git directories).
You may optionally also want to do a check out into that folder.
git checkout HEAD
However, you don’t have to – you can begin using it remotely without doing a local checkout.