CVS for J
What is CVS?Here is some backround information if you've never heard of CVS before.
Benefits at a glanceWhy I'm mainting J code in a CVS repository and not just as a bunch of ZIP files:
You see: feature, feature, features. But even without them, I'd use CVS. Because reason Number One is:
- version control -- see exactly what was changed when, why, and by whom.
- team support -- allow simultaneous work on files and deal with changes to the same files intelligently
- easy upgrades -- users can preview what exactly would change with an update; updates are fast because only the changed files are transfered.
- developer/user disentangulation -- users of package can decide on their own, if they want to upgrade and when they want to upgrade; development can proceed independently.
- flexible project granularity -- users decide if want to download just specific J packages or the whole she-bang in one go. And how closely they want to track changes to which packages.
- derived versions -- users of a package can make their own changes and still incorporate later updates. Without doing the same changes all over again.
- automatic notifications -- get mail when your most favorite package get updated or co-developers check out common files.
- easy comparisons -- see concise change-by-change summaries between any two versions of a project for all concerned files.
- what-if queries -- what would happen if I'd do an update now?
- bug fix feedback -- users of a package can submit fixes to the developers easily. The developers can integrate such a fix easily even when they already made further changes on their own.
- time -- life is simply too short to prepare packages over and over again or to accept ZIP files via email to put them into an FTP directory.
Some notes on CVS's origins and historyCVS is the Concurrent Version System, an extension to RCS, the Revision Control System written for Unix by Walter F. Tichy in the early 80'ies.
RCS takes care of two things:
CVS extends RCS by
- Version control, ie. you can retrieve previous versions of a file, see the differences between any two versions, add comments about a revision (outside of the file itself if you prefer that), and of course you never ever need to add your name or the current change date on your own anymore.
- Access control, ie. it can guarantee that only one programmer of a team has write access to a file.
CVS can used for small single projects and huge multi-project systems alike. For example, you can synchronize with the entire FreeBSD or NetBSD system sources through CVS (or just specific parts you are interested in, say, the kernel and all the C development tools).
- better means to manage entire file sets ("I need the all sources of the FOO project as of the beginning of this year." Or: "OK, let's bumb up the major release number of all FOO sources to 5.0")
- a vastly relaxed locking modell. Basically, any developer checks out his/her own copy of the sources. RCS didn't work with copies; a team would work all in the same directory, with the same files, protected by RCS' locking. But empricial tests showed that it is actually viable for the programmers to make indepent copies of the sources, work with those, and merge the changed files back afterwards. (If you have the disk space resources.) The tests showed that simultaneous changes are mostly conflict free in real life and automatic merges can be done most of the time, leaving just minor conflicts to be resolved manually. Thus "CVS" was born. The version-controlled master-copy is called "the repository".
- off-site access to the sources via various protocols. (RCS was built during a time when you had one host and not even LAN networking under Unix.) Off-site developer notifications when certain specific modules get updated. Off-site locks.
CVS availablility/distributio/deploymentThe use of CVS to maintain the J repository is not just an academic exercise. I'm not asking you to learn and use some arcane, exotic you'll never use again. Please be assured that CVS is rapidly becoming a standard technology in the Unix world. Basically all "open source" projects are now moving away from distributing sources as tar files to providing them via CVS. All the free Unixen today, Linux and BSD distributions alike, come now with the cvs command pre-installed.
If you've never used cvs before, yes, the first 2 or 3 uses will require some learning and thoughts. But then things quickly become second nature. (Remember the times when you had to learn what "binary mode transfer" is for FTP?)
I hope you'll enjoy getting familiar with cvs. For me, there's no way back.