CVS: Why can't we all just get along?
CVS is RCS on steroids. There's a dozen or more projects dedicated to replacing CVS, simply because it's big and rather limited in what it can do. Perforce, Subversion, and Linus's new toy git all exist to record changes to a file over time.
Even The OpenBSD Project is getting in on the action with a CVS workalike replacement called OpenCVS. So why do people hate CVS so much?
I can't say. Linus would argue that it doesn't scale to meet the needs of his kernel. And Perforce and Subversion are trying desperately, and with various levels of success, to rethink the cvs paradigm. Me? I think CVS is too much for my needs. When I need versioning control, I go to RCS.
There are so few resources still supporting RCS anymore it's kind of like why every modern UNIX distribution still includes the ed program. It's just vestigial cruft from days gone by, a nod to our forefathers Kernighan, Thompson, and Ritchie. UNIX maintainers probably include ed out of fear that its removal will result in the Great Old Ones emerging from their sunken crypts and begin wreaking havoc upon their spoiled children for their misdeeds.
Still, whether you use Perforce, git, or just rsync your diffs into folders that follow a "YYYMMDD" naming convention, you need to know how to work a basic CVS connection. So, for posterity's sake, here's how to get the NetBSD pkgsrc source tree using CVS over SSH. Now, to be honest, NetBSD maintainers need to pay closer attention to these matters themselves, since I haven't actually gotten the entire tree yet. (Theo wouldn't let it get this bad.) But I've got 126MB of it, and I suppose that's a start.
$ CVSROOT=anoncvs@anoncvs.NetBSD.org:/cvsroot; export CVSROOT $ CVS_RSH=ssh; export CVS_RSH
At this point, I'm wondering why NetBSD doesn't use SSH by default. I mean, seriously, folks: it's not that hard.
$ cd ~/Desktop $ mkdir pkgsrc $ cvs checkout -P pkgsrc
The nice thing about CVS is that, like rsync, its goal is to recreate trees of files and directories. To this end, the command "cvs checkout -P pkgsrc" will behave the same if you have a completely empty directory or are just missing a file or two. In the end, barring the random errors that will arise from time to time, you end up with a complete tree without having to specify which files you're missing, or that you want a full tree. CVS "just knows" to get the whole enchilada.
Here is one such error. It is, specifically, the one I've been getting all afternoon.
cvs checkout: in directory pkgsrc/devel/cvs: cvs checkout: cannot open CVS/Entries for reading: No such file or directory cvs checkout: Updating pkgsrc/devel/cvs U pkgsrc/devel/cvs/DESCR cvs [checkout aborted]: cannot open CVS/Entries.Log: No such file or directory
And while I try to figure out why missing "CVS/Entries" is OK, but missing "CVS/Entries.Log" isn't, I think I'm going to have an enchilada. I kind of made myself hungry for one.
No comments:
Post a Comment