Meta-CVS is a version control system built around CVS. Although it
retains most of the features of CVS, including all of the networking
support, it is more capable than CVS, and easier to use.
Its main features are:
- Directory structure versioning.
Under Meta-CVS, the directory structure of a project is versioned in the same
way as the contents of its files. Concurrent changes to the directory structure
are permitted. It can be branched, and merged. The program dynamically rearranges
the structure of the sandbox as you obtain updates from the repository, switch
branches or retrieve old revisions.
- User-friendly file type handling.
Meta-CVS interactively handles file types when files are imported or added. It
remembers, for instance, that .png files are considered binary so that when new
instances of them are added, they are automatically treated as binary.
- Sane corner cases.
Meta-CVS handles the use case when two or more developers add a file of the
same name to the same location. It handles the case when someone removes a file
that someone else is modifying. It handles the case of files being removed
and later added with a different keyword expansion mode. It handles
names containing spaces. All of these cause problems in CVS, but not
in Meta-CVS, because Meta-CVS simply avoids feeding CVS the patterns of
use and troublesome inputs that tickle the CVS bugs.
- Simple branching and merging.
Creating a branch, switching among branches and merging are simple commands
that take one argument. The software keeps track of what has been merged where
from what branch. Thus Meta-CVS makes it easy to manage multiple lines
of development.
- Support for symbolic links and meta-data.
Symbolic links are versioned objects in Meta-CVS. Files and symbolic
links can have attached property lists, which are versioned.
One standard property determines whether or not a file is executable,
so in this way Meta-CVS versions the execute permission.
- Tracking of third party code containing moves and renames.
Meta-CVS has an importing feature called ``grab'' similar in concept to CVS vendor
branches, but with significant differences. When a snapshot of code is
grabbed onto a branch, the program analyzes the contents of apparently added and
removed files to determine which of them are actually moves. An ordinary
branch is used, not CVS vendor branches, which are deprecated in Meta-CVS.
Ordinary branches can shoot from anywhere, not just version 1.1 of every
file, so third party ``grab branches'' representing multiple sources are
possible. The grab feature can be used to reconstruct the restructuring
history of old projects, provided that a sequence of snapshots is available.
Then it's possible to apply standard version control tricks, like fix
a bug in an old version, and merge it to the latest, despite renamed
or moved files.
- Ease of deployment.
The software doesn't require any repository-side installation; it uses the
CVS client interface only. If you have write access to a remote CVS repository,
you can install it on your client system and create a Meta-CVS module
stored on the remote repository.
- CVS migration.
One good way to migrate an existing project to Meta-CVS is to
start with a sequence of clean snapshots and use
mcvs grab
to import them one at a time. This allows Meta-CVS to unravel the
directory structure changes between the snapshots and represent them
properly. However, it is also possible to create a Meta-CVS project
directly from a CVS project, with a repository-side conversion tool
that is built into Meta-CVS. This tool allows users to preserve the
detailed version history of every file. The original, unmodified RCS
files of the CVS project are used to populate the new Meta-CVS project.
System requirements: Meta-CVS runs on Linux, and on Windows under Cygwin.
If the /dev/urandom device is present, it will use it, otherwise fall
back on the pseudo-random number generator built into CLISP. An
installation of CVS is required. A text editor is required;
/bin/vi is used by default, or whatever the EDITOR
environment variable indicates.
Downloads
The most up to date releases are hosted on
common-lisp.net.
Note for Cygwin users: 1.0.8 and later releases require that there
exists a /dev directory. Just ``mkdir /dev''.
Below are historic releases from the 1.0 stable stream.
And from the development stream. The 1.1.98 version on common-lisp.net is a 1.2
release candidate, so I warped the version number to 98.
July 2019 update: Meta-CVS 1.2:
Related Software
Robin Verduijn developed a
patch
for the
ViewCVS
software to provide improved browsing of
Meta-CVS repositories.
Gábor Melis developed Ho-CVS (Higher
Order CVS) based on Meta-CVS.
Links and Rants
Meta-CVS is listed
on freshmeat, and every release
is announced there.
The suggested IRC forum for discussing Meta-CVS is the
#mcvs channel at irc.freenode.net.
There is a Meta-CVS page
in CLiki,
a collaborative authoring system written in Common Lisp,
dedicated to Lisp-related topics.
I have prepared a table which
compares the features of Subversion and Meta-CVS.
Here are some responses to
a few ill-considered criticisms of Meta-CVS.
And here are some responses to
more criticisms.
The Meta-CVS Guarantee
If you are not fully satisfied with Meta-CVS for any reason, simply
change to your installation directory and type ``rm mcvs*''. Your
disk space will be promptly refunded. No questions asked (unless
you use rm -i, of course).
Notes About the Shark Logo
Though the CVS project appears to have no logo currently, some users may
remember that for some time, CVS had an unofficial logo depicting a fish with
some bubbles coming out of its mouth:
This originated from Pacal Molli's "CVS Bubbles" site. The logo was
later revised to this stylized version:
The Meta-CVS logo has two meanings. Firstly, the shark has eaten the CVS fish.
Secondly, the shark is more of a contender in the sea of version control than a
cute little fish. The Logo was produced using the Dia program. I neglected to
include this in the sources, but I have the original Dia file. The letters of
the Meta-CVS caption are "hand made" using using thick Bezier paths; they are
not from a font.
Return to Home page.