Why do I still have projects in CVS in 2018?
- I inherited them
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
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.