Why do I still have projects in CVS in 2018?
- I inherited them
- Inertia
Fortunately, the cvs2svn project includes cvs2git. The instructions included are good, but here are a few things I ran into that may be useful:
You need the actual CVS repo, not a checked out copy. If you run cvs2git
on a checked-out copy, you will get an error message like:
ERROR: No RCS files found under 'projectname'
I found that mentioned on svn2git fails “ERROR: No RCS files found under…”. A comment there mentions getting a tarball of your project from Sourceforge, but if you aren’t working with a Sourceforge project, make your own tarball:
tar -cf cvs.tar.gz /path/to/CVS
I created a tarball because I am not running cvs2git
on the same machine as my actual CVS repo. cvs2git
is non-destructive, and I have backups in case something goes wrong, but I didn’t feel like taking any risks (or testing my restore procedures) at that moment.
I ended up running cvs2git
on a Fedora VM. First, install CVS:
sudo dnf install cvs
Install cvs2svn
:
wget http://cvs2svn.tigris.org/files/documents/1462/49543/cvs2svn-2.5.0.tar.gz
tar -xf cvs2svn-2.5.0.tar.gz
cd cvs2svn-2.5.0
make install
Create the blob and dump files (you’ll import these into git shortly):
cvs2git --blobfile=/tmp/gitblob.dat --dumpfile=/tmp/gitdump.dat /path/to/specific/cvs/project
Create a bare git repository:
git init --bare reponame
cd reponame
Import the blob and dump files into the git repository:
cat /tmp/gitblob.dat /tmp/gitdump.dat | git fast-import
Now the CVS project is a git repository! Great, but how do I put a bare repo on GitHub or a GitHub Enterprise instance? The article Moving a repository from GitHub.com to GitHub Enterprise was helpful:
git remote add origin git@[hostname]:[owner]/[repo-name].git
git push origin--mirror
(It’s still a bare repo locally, so if you want to check it out you can clone it out to another destination folder, or rm -rf
the local repo and clone it.)
The last thing I wanted to do: make the current CVS project read-only. That turned out to be more confusing than I expected, so I’ve turned that into a separate post, Make a CVS project read-only.