This is cvs.info, produced by makeinfo version 4.3 from
../../doc/cvs.texinfo.

INFO-DIR-SECTION GNU Packages
START-INFO-DIR-ENTRY
* CVS: (cvs).                   Concurrent Versions System
END-INFO-DIR-ENTRY
INFO-DIR-SECTION Individual utilities
START-INFO-DIR-ENTRY
* cvs: (cvs)CVS commands.       Concurrent Versions System
END-INFO-DIR-ENTRY


File: cvs.info,  Node: update options,  Next: update output,  Up: update

update options
--------------

   These standard options are available with `update' (*note Common
options::, for a complete description of them):

`-D date'
     Use the most recent revision no later than DATE.  This option is
     sticky, and implies `-P'.  See *Note Sticky tags::, for more
     information on sticky tags/dates.

`-f'
     Only useful with the `-D' or `-r' flags.  If no matching revision
     is found, retrieve the most recent revision (instead of ignoring
     the file).

`-k KFLAG'
     Process keywords according to KFLAG.  See *Note Keyword
     substitution::.  This option is sticky; future updates of this
     file in this working directory will use the same KFLAG.  The
     `status' command can be viewed to see the sticky options.  See
     *Note Invoking CVS::, for more information on the `status' command.

`-l'
     Local; run only in current working directory.  *Note Recursive
     behavior::.

`-P'
     Prune empty directories.  See *Note Moving directories::.

`-p'
     Pipe files to the standard output.

`-R'
     Update directories recursively (default).  *Note Recursive
     behavior::.

`-r TAG[:DATE]'
     Retrieve the revisions specified by TAG or, when DATE is specified
     and TAG is a branch tag, the version from the branch TAG as it
     existed on DATE.  This option is sticky, and implies `-P'.  See
     *Note Sticky tags::, for more information on sticky tags/dates.
     Also see *Note Common options::.

   These special options are also available with `update'.

`-A'
     Reset any sticky tags, dates, or `-k' options.  See *Note Sticky
     tags::, for more information on sticky tags/dates.

`-C'
     Overwrite locally modified files with clean copies from the
     repository (the modified file is saved in `.#FILE.REVISION',
     however).

`-d'
     Create any directories that exist in the repository if they're
     missing from the working directory.  Normally, `update' acts only
     on directories and files that were already enrolled in your
     working directory.

     This is useful for updating directories that were created in the
     repository since the initial checkout; but it has an unfortunate
     side effect.  If you deliberately avoided certain directories in
     the repository when you created your working directory (either
     through use of a module name or by listing explicitly the files
     and directories you wanted on the command line), then updating
     with `-d' will create those directories, which may not be what you
     want.

`-I NAME'
     Ignore files whose names match NAME (in your working directory)
     during the update.  You can specify `-I' more than once on the
     command line to specify several files to ignore.  Use `-I !' to
     avoid ignoring any files at all.  *Note cvsignore::, for other
     ways to make CVS ignore some files.

`-WSPEC'
     Specify file names that should be filtered during update.  You can
     use this option repeatedly.

     SPEC can be a file name pattern of the same type that you can
     specify in the `.cvswrappers' file. *Note Wrappers::.

`-jREVISION'
     With two `-j' options, merge changes from the revision specified
     with the first `-j' option to the revision specified with the
     second `j' option, into the working directory.

     With one `-j' option, merge changes from the ancestor revision to
     the revision specified with the `-j' option, into the working
     directory.  The ancestor revision is the common ancestor of the
     revision which the working directory is based on, and the revision
     specified in the `-j' option.

     Note that using a single `-j TAGNAME' option rather than `-j
     BRANCHNAME' to merge changes from a branch will often not remove
     files which were removed on the branch.  *Note Merging adds and
     removals::, for more.

     In addition, each `-j' option can contain an optional date
     specification which, when used with branches, can limit the chosen
     revision to one within a specific date.  An optional date is
     specified by adding a colon (:) to the tag:
     `-jSYMBOLIC_TAG:DATE_SPECIFIER'.

     *Note Branching and merging::.


File: cvs.info,  Node: update output,  Prev: update options,  Up: update

update output
-------------

   `update' and `checkout' keep you informed of their progress by
printing a line for each file, preceded by one character indicating the
status of the file:

`U FILE'
     The file was brought up to date with respect to the repository.
     This is done for any file that exists in the repository but not in
     your working directory, and for files that you haven't changed but
     are not the most recent versions available in the repository.

`P FILE'
     Like `U', but the CVS server sends a patch instead of an entire
     file.  This accomplishes the same thing as `U' using less
     bandwidth.

`A FILE'
     The file has been added to your private copy of the sources, and
     will be added to the source repository when you run `commit' on
     the file.  This is a reminder to you that the file needs to be
     committed.

`R FILE'
     The file has been removed from your private copy of the sources,
     and will be removed from the source repository when you run
     `commit' on the file.  This is a reminder to you that the file
     needs to be committed.

`M FILE'
     The file is modified in  your  working  directory.

     `M' can indicate one of two states for a file you're working on:
     either there were no modifications to the same file in the
     repository, so that your file remains as you last saw it; or there
     were modifications in the repository as well as in your copy, but
     they were merged successfully, without conflict, in your working
     directory.

     CVS will print some messages if it merges your work, and a backup
     copy of your working file (as it looked before you ran `update')
     will be made.  The exact name of that file is printed while
     `update' runs.

`C FILE'
     A conflict was detected while trying to merge your changes to FILE
     with changes from the source repository.  FILE (the copy in your
     working directory) is now the result of attempting to merge the
     two revisions; an unmodified copy of your file is also in your
     working directory, with the name `.#FILE.REVISION' where REVISION
     is the revision that your modified file started from.  Resolve the
     conflict as described in *Note Conflicts example::.  (Note that
     some systems automatically purge files that begin with `.#' if
     they have not been accessed for a few days.  If you intend to keep
     a copy of your original file, it is a very good idea to rename
     it.)  Under VMS, the file name starts with `__' rather than `.#'.

`? FILE'
     FILE is in your working directory, but does not correspond to
     anything in the source repository, and is not in the list of files
     for CVS to ignore (see the description of the `-I' option, and
     *note cvsignore::).


File: cvs.info,  Node: Invoking CVS,  Next: Administrative files,  Prev: CVS commands,  Up: Top

Quick reference to CVS commands
*******************************

   This appendix describes how to invoke CVS, with references to where
each command or feature is described in detail.  For other references
run the `cvs --help' command, or see *Note Index::.

   A CVS command looks like:

     cvs [ GLOBAL_OPTIONS ] COMMAND [ COMMAND_OPTIONS ] [ COMMAND_ARGS ]

   Global options:

`--allow-root=ROOTDIR'
     Specify legal CVSROOT directory (server only) (not in CVS 1.9 and
     older).  See *Note Password authentication server::.

`-a'
     Authenticate all communication (client only) (not in CVS 1.9 and
     older).  See *Note Global options::.

`-b'
     Specify RCS location (CVS 1.9 and older).  See *Note Global
     options::.

`-d ROOT'
     Specify the CVSROOT.  See *Note Repository::.

`-e EDITOR'
     Edit messages with EDITOR.  See *Note Committing your changes::.

`-f'
     Do not read the `~/.cvsrc' file.  See *Note Global options::.

`-H'
`--help'
     Print a help message.  See *Note Global options::.

`-n'
     Do not change any files.  See *Note Global options::.

`-Q'
     Be really quiet.  See *Note Global options::.

`-q'
     Be somewhat quiet.  See *Note Global options::.

`-r'
     Make new working files read-only.  See *Note Global options::.

`-s VARIABLE=VALUE'
     Set a user variable.  See *Note Variables::.

`-T TEMPDIR'
     Put temporary files in TEMPDIR.  See *Note Global options::.

`-t'
     Trace CVS execution.  See *Note Global options::.

`-v'

`--version'
     Display version and copyright information for CVS.

`-w'
     Make new working files read-write.  See *Note Global options::.

`-x'
     Encrypt all communication (client only).  See *Note Global
     options::.

`-z GZIP-LEVEL'
     Set the compression level (client only).  See *Note Global
     options::.

   Keyword expansion modes (*note Substitution modes::):

     -kkv  $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $
     -kkvl $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
     -kk   $Id$
     -kv   file1,v 1.1 1993/12/09 03:21:13 joe Exp
     -ko   no expansion
     -kb   no expansion, file is binary

   Keywords (*note Keyword list::):

     $Author: joe $
     $Date: 1993/12/09 03:21:13 $
     $CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
     $Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
     $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
     $Locker: harry $
     $Name: snapshot_1_14 $
     $RCSfile: file1,v $
     $Revision: 1.1 $
     $Source: /home/files/file1,v $
     $State: Exp $
     $Log: file1,v $
     Revision 1.1  1993/12/09 03:30:17  joe
     Initial revision

   Commands, command options, and command arguments:

`add [OPTIONS] [FILES...]'
     Add a new file/directory.  See *Note Adding files::.

    `-k KFLAG'
          Set keyword expansion.

    `-m MSG'
          Set file description.

`admin [OPTIONS] [FILES...]'
     Administration of history files in the repository.  See *Note
     admin::.

    `-b[REV]'
          Set default branch.  See *Note Reverting local changes::.

    `-cSTRING'
          Set comment leader.

    `-kSUBST'
          Set keyword substitution.  See *Note Keyword substitution::.

    `-l[REV]'
          Lock revision REV, or latest revision.

    `-mREV:MSG'
          Replace the log message of revision REV with MSG.

    `-oRANGE'
          Delete revisions from the repository.  See *Note admin
          options::.

    `-q'
          Run quietly; do not print diagnostics.

    `-sSTATE[:REV]'
          Set the state.  See *Note admin options:: for more
          information on possible states.

    `-t'
          Set file description from standard input.

    `-tFILE'
          Set file description from FILE.

    `-t-STRING'
          Set file description to STRING.

    `-u[REV]'
          Unlock revision REV, or latest revision.

`annotate [OPTIONS] [FILES...]'
     Show last revision where each line was modified.  See *Note
     annotate::.

    `-D DATE'
          Annotate the most recent revision no later than DATE.  See
          *Note Common options::.

    `-F'
          Force annotation of binary files.  (Without this option,
          binary files are skipped with a message.)

    `-f'
          Use head revision if tag/date not found.  See *Note Common
          options::.

    `-l'
          Local; run only in current working directory.  *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-r TAG[:DATE]'
          Annotate revisions specified by TAG or, when DATE is specified
          and TAG is a branch tag, the version from the branch TAG as it
          existed on DATE.  See *Note Common options::.

`checkout [OPTIONS] MODULES...'
     Get a copy of the sources.  See *Note checkout::.

    `-A'
          Reset any sticky tags/date/options.  See *Note Sticky tags::
          and *Note Keyword substitution::.

    `-c'
          Output the module database.  See *Note checkout options::.

    `-D DATE'
          Check out revisions as of DATE (is sticky).  See *Note Common
          options::.

    `-d DIR'
          Check out into DIR.  See *Note checkout options::.

    `-f'
          Use head revision if tag/date not found.  See *Note Common
          options::.

    `-j TAG[:DATE]'
          Merge in the change specified by TAG, or when DATE is
          specified and TAG is a branch tag, the version from the
          branch TAG as it existed on DATE.  See *Note checkout
          options::.

    `-k KFLAG'
          Use KFLAG keyword expansion.  See *Note Substitution modes::.

    `-l'
          Local; run only in current working directory.  *Note
          Recursive behavior::.

    `-N'
          Don't "shorten" module paths if -d specified.  See *Note
          checkout options::.

    `-n'
          Do not run module program (if any).  See *Note checkout
          options::.

    `-P'
          Prune empty directories.  See *Note Moving directories::.

    `-p'
          Check out files to standard output (avoids stickiness).  See
          *Note checkout options::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-r TAG[:DATE]'
          Checkout the revision already tagged with TAG or, when DATE is
          specified and TAG is a branch tag, the version from the
          branch TAG as it existed on DATE.  This .  See *Note Common
          options::.

    `-s'
          Like -c, but include module status.  See *Note checkout
          options::.

`commit [OPTIONS] [FILES...]'
     Check changes into the repository.  See *Note commit::.

    `-c'
          Check for valid edits before committing.  Requires a CVS
          client and server both version 1.12.10 or greater.

    `-F FILE'
          Read log message from FILE.  See *Note commit options::.

    `-f'
          Force the file to be committed; disables recursion.  See
          *Note commit options::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-m MSG'
          Use MSG as log message.  See *Note commit options::.

    `-n'
          Do not run module program (if any).  See *Note commit
          options::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-r REV'
          Commit to REV.  See *Note commit options::.

`diff [OPTIONS] [FILES...]'
     Show differences between revisions.  See *Note diff::.  In
     addition to the options shown below, accepts a wide variety of
     options to control output style, for example `-c' for context
     diffs.

    `-D DATE1'
          Diff revision for date against working file.  See *Note diff
          options::.

    `-D DATE2'
          Diff REV1/DATE1 against DATE2.  See *Note diff options::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-N'
          Include diffs for added and removed files.  See *Note diff
          options::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-r TAG1[:DATE1]'
          Diff the revisions specified by TAG1 or, when DATE1 is
          specified and TAG1 is a branch tag, the version from the
          branch TAG1 as it existed on DATE1, against the working file.
          See *Note diff options:: and *Note Common options::.

    `-r TAG2[:DATE2]'
          Diff the revisions specified by TAG2 or, when DATE2 is
          specified and TAG2 is a branch tag, the version from the
          branch TAG2 as it existed on DATE2, against REV1/DATE1.  See
          *Note diff options:: and *Note Common options::.

`edit [OPTIONS] [FILES...]'
     Get ready to edit a watched file.  See *Note Editing files::.

    `-a ACTIONS'
          Specify actions for temporary watch, where ACTIONS is `edit',
          `unedit', `commit', `all', or `none'.  See *Note Editing
          files::.

    `-c'
          Check edits: Edit fails if someone else is already editting
          the file.  Requires a CVS client and server both of version
          1.12.10 or greater.

    `-f'
          Force edit; ignore other edits.  Added in CVS 1.12.10.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

`editors [OPTIONS] [FILES...]'
     See who is editing a watched file.  See *Note Watch information::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

`export [OPTIONS] MODULES...'
     Export files from CVS.  See *Note export::.

    `-D DATE'
          Check out revisions as of DATE.  See *Note Common options::.

    `-d DIR'
          Check out into DIR.  See *Note export options::.

    `-f'
          Use head revision if tag/date not found.  See *Note Common
          options::.

    `-k KFLAG'
          Use KFLAG keyword expansion.  See *Note Substitution modes::.

    `-l'
          Local; run only in current working directory.  *Note
          Recursive behavior::.

    `-N'
          Don't "shorten" module paths if -d specified.  See *Note
          export options::.

    `-n'
          Do not run module program (if any).  See *Note export
          options::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-r TAG[:DATE]'
          Export the revisions specified by TAG or, when DATE is
          specified and TAG is a branch tag, the version from the
          branch TAG as it existed on DATE.  See *Note Common options::.

`history [OPTIONS] [FILES...]'
     Show repository access history.  See *Note history::.

    `-a'
          All users (default is self).  See *Note history options::.

    `-b STR'
          Back to record with STR in module/file/repos field.  See
          *Note history options::.

    `-c'
          Report on committed (modified) files.  See *Note history
          options::.

    `-D DATE'
          Since DATE.  See *Note history options::.

    `-e'
          Report on all record types.  See *Note history options::.

    `-l'
          Last modified (committed or modified report).  See *Note
          history options::.

    `-m MODULE'
          Report on MODULE (repeatable).  See *Note history options::.

    `-n MODULE'
          In MODULE.  See *Note history options::.

    `-o'
          Report on checked out modules.  See *Note history options::.

    `-p REPOSITORY'
          In REPOSITORY.  See *Note history options::.

    `-r REV'
          Since revision REV.  See *Note history options::.

    `-T'
          Produce report on all TAGs.  See *Note history options::.

    `-t TAG'
          Since tag record placed in history file (by anyone).  See
          *Note history options::.

    `-u USER'
          For user USER (repeatable).  See *Note history options::.

    `-w'
          Working directory must match.  See *Note history options::.

    `-x TYPES'
          Report on TYPES, one or more of `TOEFWUPCGMAR'.  See *Note
          history options::.

    `-z ZONE'
          Output for time zone ZONE.  See *Note history options::.

`import [OPTIONS] REPOSITORY VENDOR-TAG RELEASE-TAGS...'
     Import files into CVS, using vendor branches.  See *Note import::.

    `-b BRA'
          Import to vendor branch BRA.  See *Note Multiple vendor
          branches::.

    `-d'
          Use the file's modification time as the time of import.  See
          *Note import options::.

    `-k KFLAG'
          Set default keyword substitution mode.  See *Note import
          options::.

    `-m MSG'
          Use MSG for log message.  See *Note import options::.

    `-I IGN'
          More files to ignore (! to reset).  See *Note import
          options::.

    `-W SPEC'
          More wrappers.  See *Note import options::.

`init'
     Create a CVS repository if it doesn't exist.  See *Note Creating a
     repository::.

`kserver'
     Kerberos authenticated server.  See *Note Kerberos authenticated::.

`log [OPTIONS] [FILES...]'
     Print out history information for files.  See *Note log::.

    `-b'
          Only list revisions on the default branch.  See *Note log
          options::.

    `-d DATES'
          Specify dates (D1<D2 for range, D for latest before).  See
          *Note log options::.

    `-h'
          Only print header.  See *Note log options::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-N'
          Do not list tags.  See *Note log options::.

    `-R'
          Only print name of RCS file.  See *Note log options::.

    `-rREVS'
          Only list revisions REVS.  See *Note log options::.

    `-s STATES'
          Only list revisions with specified states.  See *Note log
          options::.

    `-t'
          Only print header and descriptive text.  See *Note log
          options::.

    `-wLOGINS'
          Only list revisions checked in by specified logins.  See
          *Note log options::.

`login'
     Prompt for password for authenticating server.  See *Note Password
     authentication client::.

`logout'
     Remove stored password for authenticating server.  See *Note
     Password authentication client::.

`pserver'
     Password authenticated server.  See *Note Password authentication
     server::.

`rannotate [OPTIONS] [MODULES...]'
     Show last revision where each line was modified.  See *Note
     annotate::.

    `-D DATE'
          Annotate the most recent revision no later than DATE.  See
          *Note Common options::.

    `-F'
          Force annotation of binary files.  (Without this option,
          binary files are skipped with a message.)

    `-f'
          Use head revision if tag/date not found.  See *Note Common
          options::.

    `-l'
          Local; run only in current working directory.  *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-r TAG[:DATE]'
          Annotate the revision specified by TAG or, when DATE is
          specified and TAG is a branch tag, the version from the
          branch TAG as it existed on DATE.  See *Note Common options::.

`rdiff [OPTIONS] MODULES...'
     Show differences between releases.  See *Note rdiff::.

    `-c'
          Context diff output format (default).  See *Note rdiff
          options::.

    `-D DATE'
          Select revisions based on DATE.  See *Note Common options::.

    `-f'
          Use head revision if tag/date not found.  See *Note Common
          options::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-r TAG[:DATE]'
          Select the revisions specified by TAG or, when DATE is
          specified and TAG is a branch tag, the version from the
          branch TAG as it existed on DATE.  See *Note diff options::
          and *Note Common options::.

    `-s'
          Short patch - one liner per file.  See *Note rdiff options::.

    `-t'
          Top two diffs - last change made to the file.  See *Note diff
          options::.

    `-u'
          Unidiff output format.  See *Note rdiff options::.

    `-V VERS'
          Use RCS Version VERS for keyword expansion (obsolete).  See
          *Note rdiff options::.

`release [OPTIONS] DIRECTORY'
     Indicate that a directory is no longer in use.  See *Note
     release::.

    `-d'
          Delete the given directory.  See *Note release options::.

`remove [OPTIONS] [FILES...]'
     Remove an entry from the repository.  See *Note Removing files::.

    `-f'
          Delete the file before removing it.  See *Note Removing
          files::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

`rlog [OPTIONS] [FILES...]'
     Print out history information for modules.  See *Note log::.

    `-b'
          Only list revisions on the default branch.  See *Note log
          options::.

    `-d DATES'
          Specify dates (D1<D2 for range, D for latest before).  See
          *Note log options::.

    `-h'
          Only print header.  See *Note log options::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-N'
          Do not list tags.  See *Note log options::.

    `-R'
          Only print name of RCS file.  See *Note log options::.

    `-rREVS'
          Only list revisions REVS.  See *Note log options::.

    `-s STATES'
          Only list revisions with specified states.  See *Note log
          options::.

    `-t'
          Only print header and descriptive text.  See *Note log
          options::.

    `-wLOGINS'
          Only list revisions checked in by specified logins.  See
          *Note log options::.

`rtag [OPTIONS] TAG MODULES...'
     Add a symbolic tag to a module.  See *Note Revisions:: and *Note
     Branching and merging::.

    `-a'
          Clear tag from removed files that would not otherwise be
          tagged.  See *Note Tagging add/remove::.

    `-b'
          Create a branch named TAG.  See *Note Branching and merging::.

    `-B'
          Used in conjunction with -F or -d, enables movement and
          deletion of branch tags.  Use with extreme caution.

    `-D DATE'
          Tag revisions as of DATE.  See *Note Tagging by date/tag::.

    `-d'
          Delete TAG.  See *Note Modifying tags::.

    `-F'
          Move TAG if it already exists.  See *Note Modifying tags::.

    `-f'
          Force a head revision match if tag/date not found.  See *Note
          Tagging by date/tag::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-n'
          No execution of tag program.  See *Note Common options::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-r TAG[:DATE]'
          Tag the revision already tagged with TAG or, when DATE is
          specified and TAG is a branch tag, the version from the
          branch TAG as it existed on DATE.  See *Note Tagging by
          date/tag:: and *Note Common options::.

`server'
     Rsh server.  See *Note Connecting via rsh::.

`status [OPTIONS] FILES...'
     Display status information in a working directory.  See *Note File
     status::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-v'
          Include tag information for file.  See *Note Tags::.

`tag [OPTIONS] TAG [FILES...]'
     Add a symbolic tag to checked out version of files.  See *Note
     Revisions:: and *Note Branching and merging::.

    `-b'
          Create a branch named TAG.  See *Note Branching and merging::.

    `-c'
          Check that working files are unmodified.  See *Note Tagging
          the working directory::.

    `-D DATE'
          Tag revisions as of DATE.  See *Note Tagging by date/tag::.

    `-d'
          Delete TAG.  See *Note Modifying tags::.

    `-F'
          Move TAG if it already exists.  See *Note Modifying tags::.

    `-f'
          Force a head revision match if tag/date not found.  See *Note
          Tagging by date/tag::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-r TAG[:DATE]'
          Tag the revision already tagged with TAG, or when DATE is
          specified and TAG is a branch tag, the version from the
          branch TAG as it existed on DATE.  See *Note Tagging by
          date/tag:: and *Note Common options::.

`unedit [OPTIONS] [FILES...]'
     Undo an edit command.  See *Note Editing files::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

`update [OPTIONS] [FILES...]'
     Bring work tree in sync with repository.  See *Note update::.

    `-A'
          Reset any sticky tags/date/options.  See *Note Sticky tags::
          and *Note Keyword substitution::.

    `-C'
          Overwrite locally modified files with clean copies from the
          repository (the modified file is saved in `.#FILE.REVISION',
          however).

    `-D DATE'
          Check out revisions as of DATE (is sticky).  See *Note Common
          options::.

    `-d'
          Create directories.  See *Note update options::.

    `-f'
          Use head revision if tag/date not found.  See *Note Common
          options::.

    `-I IGN'
          More files to ignore (! to reset).  See *Note import
          options::.

    `-j TAG[:DATE]'
          Merge in changes from revisions specified by TAG or, when
          DATE is specified and TAG is a branch tag, the version from
          the branch TAG as it existed on DATE.  See *Note update
          options::.

    `-k KFLAG'
          Use KFLAG keyword expansion.  See *Note Substitution modes::.

    `-l'
          Local; run only in current working directory.  *Note
          Recursive behavior::.

    `-P'
          Prune empty directories.  See *Note Moving directories::.

    `-p'
          Check out files to standard output (avoids stickiness).  See
          *Note update options::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

    `-r TAG[:DATE]'
          Checkout the revisions specified by TAG or, when DATE is
          specified and TAG is a branch tag, the version from the
          branch TAG as it existed on DATE.  See *Note Common options::.

    `-W SPEC'
          More wrappers.  See *Note import options::.

`version'
     Display the version of CVS being used.  If the repository is
     remote, display both the client and server versions.

`watch [on|off|add|remove] [OPTIONS] [FILES...]'
     on/off: turn on/off read-only checkouts of files.  See *Note
     Setting a watch::.

     add/remove: add or remove notification on actions.  See *Note
     Getting Notified::.

    `-a ACTIONS'
          Specify actions for temporary watch, where ACTIONS is `edit',
          `unedit', `commit', `all', or `none'.  See *Note Editing
          files::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.

`watchers [OPTIONS] [FILES...]'
     See who is watching a file.  See *Note Watch information::.

    `-l'
          Local; run only in current working directory.  See *Note
          Recursive behavior::.

    `-R'
          Operate recursively (default).  *Note Recursive behavior::.


File: cvs.info,  Node: Administrative files,  Next: Environment variables,  Prev: Invoking CVS,  Up: Top

Reference manual for Administrative files
*****************************************

   Inside the repository, in the directory `$CVSROOT/CVSROOT', there
are a number of supportive files for CVS.  You can use CVS in a limited
fashion without any of them, but if they are set up properly they can
help make life easier.  For a discussion of how to edit them, see *Note
Intro administrative files::.

   The most important of these files is the `modules' file, which
defines the modules inside the repository.

* Menu:

* modules::                     Defining modules
* Wrappers::                    Specify binary-ness based on file name
* Trigger Scripts::		Launch scripts in response to server events
* rcsinfo::                     Templates for the log messages
* cvsignore::                   Ignoring files via cvsignore
* checkoutlist::                Adding your own administrative files
* history file::                History information
* Variables::                   Various variables are expanded
* config::                      Miscellaneous CVS configuration


File: cvs.info,  Node: modules,  Next: Wrappers,  Up: Administrative files

The modules file
================

   The `modules' file records your definitions of names for collections
of source code.  CVS will use these definitions if you use CVS to
update the modules file (use normal commands like `add', `commit', etc).

   The `modules' file may contain blank lines and comments (lines
beginning with `#') as well as module definitions.  Long lines can be
continued on the next line by specifying a backslash (`\') as the last
character on the line.

   There are three basic types of modules: alias modules, regular
modules, and ampersand modules.  The difference between them is the way
that they map files in the repository to files in the working
directory.  In all of the following examples, the top-level repository
contains a directory called `first-dir', which contains two files,
`file1' and `file2', and a directory `sdir'.  `first-dir/sdir' contains
a file `sfile'.

* Menu:

* Alias modules::             The simplest kind of module
* Regular modules::
* Ampersand modules::
* Excluding directories::     Excluding directories from a module
* Module options::            Regular and ampersand modules can take options
* Module program options::    How the modules ``program options'' programs
                              are run.


File: cvs.info,  Node: Alias modules,  Next: Regular modules,  Up: modules

Alias modules
-------------

   Alias modules are the simplest kind of module:

`MNAME -a ALIASES...'
     This represents the simplest way of defining a module MNAME.  The
     `-a' flags the definition as a simple alias: CVS will treat any
     use of MNAME (as a command argument) as if the list of names
     ALIASES had been specified instead.  ALIASES may contain either
     other module names or paths.  When you use paths in aliases,
     `checkout' creates all intermediate directories in the working
     directory, just as if the path had been specified explicitly in
     the CVS arguments.

   For example, if the modules file contains:

     amodule -a first-dir

then the following two commands are equivalent:

     $ cvs co amodule
     $ cvs co first-dir

and they each would provide output such as:

     cvs checkout: Updating first-dir
     U first-dir/file1
     U first-dir/file2
     cvs checkout: Updating first-dir/sdir
     U first-dir/sdir/sfile


File: cvs.info,  Node: Regular modules,  Next: Ampersand modules,  Prev: Alias modules,  Up: modules

Regular modules
---------------

`MNAME [ options ] DIR [ FILES... ]'
     In the simplest case, this form of module definition reduces to
     `MNAME DIR'.  This defines all the files in directory DIR as
     module mname.  DIR is a relative path (from `$CVSROOT') to a
     directory of source in the source repository.  In this case, on
     checkout, a single directory called MNAME is created as a working
     directory; no intermediate directory levels are used by default,
     even if DIR was a path involving several directory levels.

   For example, if a module is defined by:

     regmodule first-dir

then regmodule will contain the files from first-dir:

     $ cvs co regmodule
     cvs checkout: Updating regmodule
     U regmodule/file1
     U regmodule/file2
     cvs checkout: Updating regmodule/sdir
     U regmodule/sdir/sfile
     $

   By explicitly specifying files in the module definition after DIR,
you can select particular files from directory DIR.  Here is an example:

     regfiles first-dir/sdir sfile

With this definition, getting the regfiles module will create a single
working directory `regfiles' containing the file listed, which comes
from a directory deeper in the CVS source repository:

     $ cvs co regfiles
     U regfiles/sfile
     $


File: cvs.info,  Node: Ampersand modules,  Next: Excluding directories,  Prev: Regular modules,  Up: modules

Ampersand modules
-----------------

   A module definition can refer to other modules by including
`&MODULE' in its definition.
     MNAME [ options ] &MODULE...

   Then getting the module creates a subdirectory for each such module,
in the directory containing the module.  For example, if modules
contains

     ampermod &first-dir

then a checkout will create an `ampermod' directory which contains a
directory called `first-dir', which in turns contains all the
directories and files which live there.  For example, the command

     $ cvs co ampermod

will create the following files:

     ampermod/first-dir/file1
     ampermod/first-dir/file2
     ampermod/first-dir/sdir/sfile

   There is one quirk/bug: the messages that CVS prints omit the
`ampermod', and thus do not correctly display the location to which it
is checking out the files:

     $ cvs co ampermod
     cvs checkout: Updating first-dir
     U first-dir/file1
     U first-dir/file2
     cvs checkout: Updating first-dir/sdir
     U first-dir/sdir/sfile
     $

   Do not rely on this buggy behavior; it may get fixed in a future
release of CVS.


File: cvs.info,  Node: Excluding directories,  Next: Module options,  Prev: Ampersand modules,  Up: modules

Excluding directories
---------------------

   An alias module may exclude particular directories from other
modules by using an exclamation mark (`!') before the name of each
directory to be excluded.

   For example, if the modules file contains:

     exmodule -a !first-dir/sdir first-dir

then checking out the module `exmodule' will check out everything in
`first-dir' except any files in the subdirectory `first-dir/sdir'.


File: cvs.info,  Node: Module options,  Next: Module program options,  Prev: Excluding directories,  Up: modules

Module options
--------------

   Either regular modules or ampersand modules can contain options,
which supply additional information concerning the module.

`-d NAME'
     Name the working directory something other than the module name.

`-e PROG'
     Specify a program PROG to run whenever files in a module are
     exported.  PROG runs with a single argument, the module name.

`-o PROG'
     Specify a program PROG to run whenever files in a module are
     checked out.  PROG runs with a single argument, the module name.
     See *Note Module program options:: for information on how PROG is
     called.

`-s STATUS'
     Assign a status to the module.  When the module file is printed
     with `cvs checkout -s' the modules are sorted according to
     primarily module status, and secondarily according to the module
     name.  This option has no other meaning.  You can use this option
     for several things besides status: for instance, list the person
     that is responsible for this module.

`-t PROG'
     Specify a program PROG to run whenever files in a module are
     tagged with `rtag'.  PROG runs with two arguments: the module name
     and the symbolic tag specified to `rtag'.  It is not run when
     `tag' is executed.  Generally you will find that the `taginfo'
     file is a better solution (*note taginfo::).

   You should also see *note Module program options:: about how the
"program options" programs are run.


File: cvs.info,  Node: Module program options,  Prev: Module options,  Up: modules

How the modules file "program options" programs are run
-------------------------------------------------------

For checkout, rtag, and export, the program is server-based, and as
such the following applies:-

   If using remote access methods (pserver, ext, etc.), CVS will
execute this program on the server from a temporary directory. The path
is searched for this program.

   If using "local access" (on a local or remote NFS file system, i.e.
repository set just to a path), the program will be executed from the
newly checked-out tree, if found there, or alternatively searched for
in the path if not.

   The programs are all run after the operation has effectively
completed.


File: cvs.info,  Node: Wrappers,  Next: Trigger Scripts,  Prev: modules,  Up: Administrative files

The cvswrappers file
====================

   Wrappers refers to a CVS feature which lets you control certain
settings based on the name of the file which is being operated on.  The
settings are `-k' for binary files, and `-m' for nonmergeable text
files.

   The `-m' option specifies the merge methodology that should be used
when a non-binary file is updated.  `MERGE' means the usual CVS
behavior: try to merge the files.  `COPY' means that `cvs update' will
refuse to merge files, as it also does for files specified as binary
with `-kb' (but if the file is specified as binary, there is no need to
specify `-m 'COPY'').  CVS will provide the user with the two versions
of the files, and require the user using mechanisms outside CVS, to
insert any necessary changes.

   *WARNING: do not use `COPY' with CVS 1.9 or earlier - such versions
of CVS will copy one version of your file over the other, wiping out
the previous contents.* The `-m' wrapper option only affects behavior
when merging is done on update; it does not affect how files are
stored.  See *Note Binary files::, for more on binary files.

   The basic format of the file `cvswrappers' is:

     wildcard     [option value][option value]...
     
     where option is one of
     -m           update methodology      value: MERGE or COPY
     -k           keyword expansion       value: expansion mode
     
     and value is a single-quote delimited value.

   For example, the following command imports a directory, treating
files whose name ends in `.exe' as binary:

     cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag


File: cvs.info,  Node: Trigger Scripts,  Next: rcsinfo,  Prev: Wrappers,  Up: Administrative files

The Trigger Scripts
===================

   Several of the administrative files support triggers, or the
launching external scripts or programs at specific times before or
after particular events, during the execution of CVS commands.  These
hooks can be used to prevent certain actions, log them, and/or maintain
anything else you deem practical.

   All the trigger scripts are launched in a copy of the user sandbox
being committed, on the server, in client-server mode.  In local mode,
the scripts are actually launched directly from the user sandbox
directory being committed.  For most intents and purposes, the same
scripts can be run in both locations without alteration.

* Menu:

* syntax::                      The common syntax
* Trigger Script Security::	Trigger script security

* commit files::                The commit support files (commitinfo,
                                verifymsg, loginfo)
*   commitinfo::                Pre-commit checking
*   verifymsg::                 How are log messages evaluated?
*   loginfo::                   Where should log messages be sent?

* postadmin::			Logging admin commands
* taginfo::                     Verifying/Logging tags
* posttag::                     Logging tags
* postwatch::			Logging watch commands

* preproxy::			Launch a script on a secondary server prior
				to becoming a write proxy
* postproxy::			Launch a script on a secondary server after
				completing proxy operations


File: cvs.info,  Node: syntax,  Next: Trigger Script Security,  Up: Trigger Scripts

The common syntax
-----------------

   The administrative files such as `commitinfo', `loginfo', `rcsinfo',
`verifymsg', etc., all have a common format.  The purpose of the files
are described later on.  The common syntax is described here.

   Each line contains the following:

   * A regular expression or the literal string `DEFAULT'.  Some script
     hooks also support the literal string `ALL'.  Other than the `ALL'
     and `DEFAULT' keywords, this is a basic regular expression in the
     syntax used by GNU emacs.  See the descriptions of the individual
     script hooks for information on whether the `ALL' keyword is
     supported (*note Trigger Scripts::).

   * A whitespace separator--one or more spaces and/or tabs.

   * A file name or command-line template.

Blank lines are ignored.  Lines that start with the character `#' are
treated as comments.  Long lines unfortunately can _not_ be broken in
two parts in any way.

   The first regular expression that matches the current directory name
in the repository or the first line containing `DEFAULT' in lieu of a
regular expression is used and all lines containing `ALL' is used for
the hooks which support the `ALL' keyword.  The rest of the line is
used as a file name or command-line template as appropriate.  See the
descriptions of the individual script hooks for information on whether
the `ALL' keyword is supported (*note Trigger Scripts::).

_Note:  The following information on format strings is valid as long as
the line `UseNewInfoFmtStrings=yes' appears in your repository's config
file (*note config::).  Otherwise, default format strings may be
appended to the command line and the `loginfo' file, especially, can
exhibit slightly different behavior.  For more information, *Note
Updating Commit Files::._

   In the cases where the second segment of the matched line is a
command line template (e.g. `commitinfo', `loginfo', & `verifymsg'),
the command line template may contain format strings which will be
replaced with specific values before the script is run.

   Format strings can represent a single variable or one or more
attributes of a list variable.  An example of a list variable would be
the list available to scripts hung on the loginfo hooks - the list of
files which were just committed.  In the case of loginfo, three
attributes are available for each list item: file name, precommit
version, and postcommit version.

   Format strings consist of a `%' character followed by an optional
`{' (required in the multiple list attribute case), a single format
character representing a variable or a single attribute of list
elements or multiple format characters representing attributes of list
elements, and a closing `}' when the open bracket was present.

   _Flat format strings_, or single format characters which get replaced
with a single value, will generate a single argument to the called
script, regardless of whether the replacement variable contains white
space or other special characters.

   _List attributes_ will generate an argument for each attribute
requested for each list item.  For example, `%{sVv}' in a `loginfo'
command template will generate three arguments (file name, precommit
version, postcommit version, ...) for each file committed.  As in the
flat format string case, each attribute will be passed in as a single
argument regardless of whether it contains white space or other special
characters.

   `%%' will be replaced with a literal `%'.

   The format strings available to all script hooks are:

c
     The canonical name of the command being executed.  For instance,
     in the case of a hook run from `cvs up', CVS would replace `%c'
     with the string `update' and, in the case of a hook run from `cvs
     ci', CVS would replace `%c' with the string `commit'.

n
     The null, or empty, string.

p
     The name of the directory being operated on within the repository.

r
     The name of the repository (the path portion of `$CVSROOT').

R
     On a server, the name of the referrer, if any.  The referrer is
     the CVSROOT the client reports it used to contact a server which
     then referred it to this server.  Should usually be set on a
     primary server with a write proxy setup.

   Other format strings are file specific.  See the docs on the
particular script hooks for more information (*note Trigger Scripts::).

   As an example, the following line in a `loginfo' file would match
only the directory `module' and any subdirectories of `module':

     ^module\(/\|$\) (echo; echo %p; echo %{sVv}; cat) >>$CVSROOT/CVSROOT/commitlog

   Using this same line and assuming a commit of new revisions 1.5.4.4
and 1.27.4.1 based on old revisions 1.5.4.3 and 1.27, respectively, of
file1 and file2 in module, something like the following log message
should be appended to commitlog:


     module
     file1 1.5.4.3 1.5.4.4 file2 1.27 1.27.4.1
     Update of /cvsroot/module
     In directory localhost.localdomain:/home/jrandom/work/module
     
     Modified Files:
     	file1 file2
     Log Message:
     A log message.

