Wandering Thoughts archives

2009-11-22

RCS versus modern version control systems

Here is something that may shock people: we're still maintaining systems files with RCS. And I maintain that this is not as crazy as it sounds, once you dig under the surface, and that system administration is one of the last places where RCS is sensible some of the time.

For all their myriad benefits, the drawback of modern version control systems is that they really want to be used on whole directories (or directory hierarchies). This is generally pretty okay for source code, where you have directories that consist almost entirely of interrelated files, but system administration has lots of situations where either much of a directory's contents will not be managed by your version control, or the files that you are managing in your VCS are not related at all apart from being in the same directory on the same system.

(/etc is the canonical example of both situations. Yes, I know about things like etckeeper; I honestly think that they're uncomfortable hacks.)

For all its disadvantages (and it has significant ones), RCS's great virtue is that it is a single-file version control system, one that manages individual files instead of entire directories. Thus, it's both easy and mindless to put just one file in some random directory under version control. You don't have to set up an elaborate system or remember to carefully sidestep much of what your VCS defaults to doing; instead you can just do 'mkdir RCS; ci -l <file>' and not worry about it.

(And there is the benefit of less taxonomy, in that you don't have to decide what level of a directory hierarchy you should set up as the repository root. Quick: do you make all of /etc a repository, or do you want separate repositories for /etc/thing1, /etc/thing2, and so on?)

Sidebar: how I would get around the cluttered directory problem

What currently strikes me as the best solution is something that I saw in the Mercurial documentation recently: just tell the repository to ignore all files except those you've explicitly added. This basically turns your VCS into an easier to use version of RCS, where the equivalent of 'mkdir RCS' is to initialize a repository that ignores everything by default.

This doesn't deal with all of the VCS problems, but it gets you part of the way.

sysadmin/RCSvsModernVCS written at 01:28:50; Add Comment


Page tools: See As Normal.
Search:
Login: Password:
Atom Syndication: Recent Pages, Recent Comments.

This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.