Contributed by Jordan K. Hubbard
<jkh@FreeBSD.ORG>
Anonymous CVS (or, as it is otherwise known, anoncvs) is a
feature provided by the CVS utilities bundled with FreeBSD for synchronizing
with a remote CVS repository. Among other things, it allows users of
FreeBSD to perform, with no special privileges, read-only CVS operations
against one of the FreeBSD project's official anoncvs servers. To use it,
one simply sets the CVSROOT environment variable to point at the
appropriate anoncvs server and then uses the cvs(1)
command to
access it like any local repository.
While it can also be said that the
CVSup and anoncvs
services both perform essentially the same function, there are various
trade-offs which can influence the user's choice of synchronization methods.
In a nutshell, CVSup
is much more efficient in its usage of
network resources and is by far the most technically sophisticated of the
two, but at a price. To use CVSup
, a special client must first be
installed and configured before any bits can be grabbed, and then only in
the fairly large chunks which CVSup
calls collections.
Anoncvs
, by contrast, can be used to examine anything from an
individual file to a specific program (like ls or grep)
by referencing the CVS module name. Of course, anoncvs
is also
only good for read-only operations on the CVS repository, so if it's your
intention to support local development in one repository shared with the
FreeBSD project bits then CVSup
is really your only option.
Configuring cvs(1)
to use an Anonymous CVS repository is
a simple matter of setting the CVSROOT environment
variable to point to one of the FreeBSD project's anoncvs
servers. At the time of this writing, the following servers are
available:
Since CVS allows one to "check out" virtually any version of the FreeBSD
sources that ever existed (or, in some cases, will exist :), you need
to be familiar with the revision (-r) flag to cvs(1)
and what some of the permissible values for it in the FreeBSD Project
repository are.
There are two kinds of tags, revision tags and branch tags. A revision tag refers to a specific revision. Its meaning stays the same from day to day. A branch tag, on the other hand, refers to the latest revision on a given line of development, at any given time. Because a branch tag does not refer to a specific revision, it may mean something different tomorrow than it means today.
Here are the branch tags that users might be interested in:
Symbolic name for the main line, or FreeBSD-current. Also the default when no revision is specified.
The line of development for FreeBSD-3.x, also known as FreeBSD-stable. Not valid for the ports collection.
The line of development for FreeBSD-2.2.x, also known as 2.2-stable. Not valid for the ports collection.
The line of development for FreeBSD-2.1.x - this branch is largely obsolete. Not valid for the ports collection.
Here are the revision tags that users might be interested in:
FreeBSD-2.2.6. Not valid for the ports collection.
FreeBSD-2.2.5. Not valid for the ports collection.
FreeBSD-2.2.2. Not valid for the ports collection.
FreeBSD-2.2.1. Not valid for the ports collection.
FreeBSD-2.2.0. Not valid for the ports collection.
FreeBSD-2.1.7. Not valid for the ports collection.
FreeBSD-2.1.6.1. Not valid for the ports collection.
FreeBSD-2.1.6. Not valid for the ports collection.
FreeBSD-2.1.5. Not valid for the ports collection.
FreeBSD-2.1.0. Not valid for the ports collection.
When you specify a branch tag, you normally receive the latest versions
of the files on that line of development. If you wish to receive some
past version, you can do so by specifying a date with the -D date
flag. See the cvs(1)
man page for more details.
While it really is recommended that you read the manual page for
cvs(1)
thoroughly before doing anything, here are some quick
examples which essentially show how to use Anonymous CVS:
Checking out something from -current (ls(1)) and deleting it again:
% setenv CVSROOT anoncvs@anoncvs.freebsd.org:/cvs % cvs co ls % cvs release -d ls
Checking out the version of ls(1) in the 2.2-stable branch:
% setenv CVSROOT anoncvs@anoncvs.freebsd.org:/cvs % cvs co -rRELENG_2_2 ls % cvs release -d ls
Creating a list of changes (as unidiffs) to ls(1) between FreeBSD 2.2.2 and FreeBSD 2.2.6:
% setenv CVSROOT anoncvs@anoncvs.freebsd.org:/cvs % cvs rdiff -u -rRELENG_2_2_2_RELEASE -rRELENG_2_2_6_RELEASE ls
Finding out what other module names can be used:
% setenv CVSROOT anoncvs@anoncvs.freebsd.org:/cvs % cvs co modules % more modules/modules % cvs release -d modules
The following additional resources may be helpful in learning CVS: