= cvssync(1) =
:doctype: manpage

== NAME ==
cvssync - fetch CVS repository masters via rsync

== SYNOPSIS ==
*cvssync* [-c] [-v] [-n] [-o outdir] [host-path module | cvsurl]

== DESCRIPTION ==
cvssync attempts to fetch a copy of a remote CVS repository into a local
directory.  All you have to tell it is the arguments you're expected
to hand CVS to perform a checkout of the remote.

Alternatively, you can give it a single argument in URL format, of
the form cvs://<host>/<path>#<module>.

If a previous cvssync has been done into the directory, cvssync will
do the least amount of file copying required to resynchronize the
local copy with the remote.  It relies on rsync(1) to accomplish this.

cvssync knows about the site-structure idiosyncracies of some major
CVS hosting sites and applies that knowledge so you don't have to.
Presently its rules are known good for SourceForge, Savannah,
Sourceware, and Berlios.  Its default method should work for many
other sites.  You can use the -v option to see what rsync command
is actually generated in these cases.

Because cvssync uses rsync, you may need to have an ssh public key 
installed in an account on the target system for it to work. However,
many CVS repositories are set up in a way that makes anonymous
read-only rsync possible.

cvssync is an auxiliary tool issued with cvs-fast-export(1) in order
to facilitate moving CVS repositories to version control systems
that aren't chipped out of flint. Of course, you can also use it
for backups and other purposes.

== OPTIONS ==

-c::
    Create a mirror that you can do checkouts from.  Normally this
    tool creates a 'bare' mirror of the module masters you are
    interested in without creating a module subdirectory and CVSROOT.
    With this option, the created directory structure is changed
    to include an empty CVSROOT, and the masters go in a subdirectory
    named after the module.  A cvs -d:local: co command can then be
    used to make a local checkout for inspection.

-n::
    Dry-run.  Generate the commands that would be performed but do not
    execute them.  Useful with -v.

-o::
    Set the name of the output directory. The default is to use the
    module name.

-v::
    Verbose.  Show subcommands as they are being executed.

== DISAMBIGUATION ==
There is another program called 'cvsync' for making live mirrors; this
is not it.  One important difference is that cvsync requires a dedicated
service daemon, cvsyncd, to be running on the CVS host; it's not
designed for ad-hoc fetches from random hosting sites.

There is a program called 'cvssuck' roughly equivalent to cvssync.  It
has the advantage that it grabs the master files using CVS client
commands, so rsync access is not required. It has the disadvantage
that because of bugs in CVS itself, it may mangle repository metadata
on the way through.  The author warns "However it is inefficient and
not perfect because cvs client/server protocol is not designed for
mirroring."  Heed this warning; do not use cvssuck except
as a last resort.

== EXAMPLES ==
Note that these examples may become obsolete as CVS repositories are
decommissioned.  They are meant to illustrate usage patterns.

cvssync cvs.sourceforge.net:/cvsroot/rfk robotfindskitten::
	Fetch the Robot Finds Kitten project from Sourceforge

cvssync rfk.cvs.sourceforge.net:/cvsroot/rfk robotfindskitten::
	Using the full Sourceforge pseudo-hostname also works.

cvssync anonymous@rfk.cvs.sourceforge.net:/cvsroot/rfk robotfindskitten::
	Any login credential is ignored.

cvssync rfk.cvs.sourceforge.net:/rfk robotfindskitten::
	The leading /cvsroot on a SourceForge path can be omitted. 

cvssync cvs://cvs.sourceforge.net/rfk#robotfindskitten::
	Same fetch using the URL argument style.

cvssync anonymous@cvs.savannah.gnu.org:/sources/groff groff::
	Fetch the groff project repository from Savannah

cvssync cvs.savannah.gnu.org:/groff groff::
	Login credential and leading /sources can be omitted on Savannah.

cvssync cvs://cvs.savannah.gnu.org/groff#groff::
	Same fetch using the URL argument style.

cvssync cvs:///home/user/foo#bar::
	Copy module bar from a local CVS repository foo.

== REPORTING BUGS ==
Report bugs to Eric S. Raymond <esr@thyrsus.com>.  The project page is
at http://catb.org/~esr/cvs-fast-export

== SEE ALSO ==
rsync(1), rcs(1), cvs(1), cvs-fast-export(1).
