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.
|
|