Software Configuration Management

Two things have got me thinking about SCMs lately:

  • Discussion on Fedora Maintainers about replacing CVS with a distributed SCM.

  • Hacking on Yum (which uses CVS), and needing some way to keep track of my patches.

For Yum, I’ve been using a copy of the CVS repository imported into Git. This is working so nicely that it has led to explore replacing SVN for dangerously incompetent.

So far I’ve done a test import of Wuja into various distributed SCMs. git svnimport worked fine. Conversion to Mercurial via
Tailor choked a bit on the tags, but is otherwise ok. I was unable to get either Tailor or bzr svn to convert the repository to Bazaar.

Some interesting figures:

| svn
| hg
| git
| raw

—|—|—|—|—

Size (KiB)
| 1888
| 1636
| 1096
| 464

In each case, disk usage is for a checkout of the main branch (i.e. trunk). The raw data from trunk HEAD is 464 KiB. Subversion requires 1424 KiB for metadata; this only contains information about the current revision. Mercurial and Git require 1172 and 632 KiB, respectively. The interesting part is that Mercurial and Git store the complete history of the repository in their metadata. You get far more information in much less space.