.\" $OpenBSD: cvs.1,v 1.33 2005/01/27 16:37:23 xsa Exp $ .\" .\" Copyright (c) 2004 Jean-Francois Brousseau .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. The name of the author may not be used to endorse or promote products .\" derived from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, .\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY .\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL .\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, .\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, .\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; .\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, .\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .Dd May 16, 2004 .Dt CVS 1 .Os .Sh NAME .Nm cvs .Nd OpenCVS Concurrent Versioning System client .Sh SYNOPSIS .Nm .Op Fl flQqtv .Op Fl d Ar root .Op Fl e Ar editor .Xo .Oo Fl s .Ar var Ns = Ns Ar val Oc .Xc .Op Fl z Ar level .Ar command Op Ar ... .Sh DESCRIPTION The .Nm program acts as both client and server for the use of and administration of a CVS source repository. CVS is used to maintain version information on files that are kept in a repository. Although it is more commonly used to track changes in source code, there are no real limitations to the type of files that you can store in a repository. .Pp Unless the .Fl f option is specified, .Nm reads its startup configuration file .Pa .cvsrc from the home directory of the user who invoked it. This file is used to specify implicit options passed to .Nm or one of its commands whenever it is invoked. See .Xr cvsrc 5 for further information. .Pp The following options are supported: .Bl -tag -width "-e editorXX" .It Fl d Ar root Use .Ar root as the path to the root directory of the CVS repository. The value must specify an absolute path. .It Fl e Ar editor Use the program .Ar editor whenever editing log information. This option overrides the environment variables CVSEDITOR, VISUAL, and EDITOR. .It Fl f Do not read the user's configuration file on startup. .It Fl l Suppress logging of history information. .It Fl Q Be extra quiet. Only error messages will be displayed. .It Fl q Be quiet about reporting. .It Fl s Ar var Ns = Ns Ar val Set the value of the internal variable .Ar var to the string .Ar val . .It Fl t Trace program execution. .It Fl v Display version information and exit. .It Fl z Ar level Specify the compression level to .Xr gzip 1 when transferring files. The compression level ranges from 1 to 9, with 1 being the fastest, and 9 providing the best level of compression. The default is 6. .El .Sh COMMANDS The following commands are supported by .Nm . .Bl -tag -width "xxxxxxxxxxxx" .It Xo Ic add Op Fl m Ar msg .Ar file Op ... .Xc .Pp Before a file is known to CVS, it must be added to the repository using this command. Adding a file does not actually publish the contents of the file, so you must .Ic commit the first revision in order to let other users see the file with the .Ic update or .Ic checkout commands. .Pp Although adding a file does not involve a log message, it is possible to specify one to include with the action, using the .Fl m option. .Pp Aliases: .Ic ad , .Ic new . .It Ic admin Administration front-end for .Xr rcs 1 . .Pp Aliases: .Ic adm , .Ic rcs . .It Xo Ic annotate .Op Fl flR .Oo Fl D Ar date \*(Ba .Fl r Ar rev Oc .Op Ar file ... .Xc .Pp For each line of any files specified, show information about its last revision. The information given is the last revision when a modification occurred, the author's name, and the date of the revision. .Pp The .Fl f flag is used to force the use of the head revision if the specified tag or date is not found. This can be used in combination with .Fl D or .Fl r to ensure that there is some output from the .Ic annotate command, even if only to show Revision 1.1 of the file. The .Fl l flag is used to limit the scope of the search to the local directory only and to disable recursive behaviour, which can be requested with the .Fl R flag. The .Fl D flag shows the annotations as of the latest revision no later than .Ar date . The .Fl r flag shows annotations as of revision .Ar rev (can be a revision number or a tag). .Pp Aliases: .Ic ann . .It Xo Ic checkout .Op Fl c .Op Ar module ... .Xc .Pp The .Ic checkout command is used to create a local copy of one or more modules present on the target CVS repository. .Pp Aliases: .Ic co , .Ic get . .It Xo Ic commit .Op Fl flnR .Oo Fl F Ar logfile \*(Ba .Fl m Ar msg Oc .Op Fl r Ar rev .Op Ar file ... .Xc .Pp The .Ic commit command is used to send local changes back to the server and update the repository's information to reflect the changes. .Pp The .Fl l flag is used to limit the scope of the search to the local directory only. Sometimes one might want to force a file to be committed, even though it is unchanged: this can be done using the .Fl f flag, which also has the effect of disabling recursive behaviour, which can be requested with the .Fl R flag. When using the .Fl n flag, programs listed in the CVSROOT/modules file do not get executed. The .Fl m flag can be used to specify a log message on the command line which suppresses the editor invocation, or use the .Fl F flag to specify a .Ar file as argument which contains the log message. The .Fl r flag can be used to commit to a particular symbolic or numerical revision. .Pp Aliases: .Ic ci , .Ic com . .It Xo Ic diff Op Fl cilNpu .Op Fl D Ar date .Op Fl r Ar rev .Op Ar file ... .Xc .Pp The .Ic diff command is very similar to the .Xr diff 1 program, except that the differential comparisons that it generates are between local or remote revisions of files stored in the CVS repository. .Pp Aliases: .Ic di , .Ic dif . .It Xo Ic edit Op Fl lR .Op Fl a Ar action .Op Ar file ... .Xc .Pp The .Ic edit command is used to make a file that is being watched (read-only) readable and writable and to inform others that you are planning to edit it. Notifications terminate when the .Ic commit command is issued. Editing rights on the file can be given up using the .Ic unedit command. This command terminates the temporary notifications. .Pp The .Fl l flag is used to limit the scope of the search to the local directory only and to disable recursive behaviour, which can be requested with the .Fl R flag. The .Fl a flag specifies the temporary notification wanted: .Bl -tag -width "commitXX" .It Cm commit Another user has committed changes to the .Ar file . .It Cm edit Another user has issued the .Ic edit command on the .Ar file . .It Cm unedit Another user has issued the .Ic unedit command on the .Ar file . .It Cm all All of the above. .It Cm none None of the above. .El .Pp The .Fl a flag may appear more than once, or not at all. If omitted, the action defaults to .Cm all . .It Xo Ic editors .Op Fl lR .Ar file ... .Xc .Pp The .Ic editors command lists the users with edition rights on a file. For that, pseudo-lock mode must be enabled (see the .Ic watch command). The e-mail address of the user editing the file, the timestamp when the edition first started, the host from where the edition has been requested and the path to the edited file are listed. .Pp The .Fl l flag is used to limit the scope of the search to the local directory only and to disable recursive behaviour, which can be requested with the .Fl R flag. .It Ic export Export sources from CVS; similar to .Ic checkout . .Pp Aliases: .Ic ex , .Ic exp . .It Ic history Show repository access history. .Pp Aliases: .Ic hi , .Ic his . .It Xo Ic import .Op Fl b Ar branch .Op Fl m Ar msg .Ar repository .Ar vendortag .Ar releasetag .Xc .Pp Import sources into CVS using vendor branches. .Pp The .Fl b flag specifies the first-level branch number. The .Fl m flag specifies the log message to send. .Pp At least three arguments are required: .Ar repository specifies the location of the sources to be imported; .Ar vendortag is a tag for the entire branch; .Ar releasetag is used to identify the files you created with .Nm .Ic import . .Pp Aliases: .Ic im , .Ic imp . .It Ic init Create a CVS repository if it doesn't exist. .It Ic kserver Start a Kerberos authentication server. .It Ic log Print out history information for files. .Pp Aliases: .Ic lo . .It Ic login Prompt for password for authenticating server. .It Ic logout Remove entry in .cvspass for remote repository. .It Ic rdiff Create .Xr patch 1 format diffs between releases. .It Ic release Indicate that a module is no longer in use. .It Xo Ic remove .Op Fl flR .Op Ar file ... .Xc The .Ic remove command is used to inform .Nm that .Ar file is scheduled to be removed from the repository. Files are not actually removed from the repository until the .Ic commit command has been run subsequently. .Pp The .Fl f flag locally removes the file. If this flag is not used, the file must be locally removed beforehand for the command to be valid. The .Fl l flag is used to limit the scope of the search to the local directory only and to disable recursive behaviour, which can be requested with the .Fl R flag. .Pp Aliases: .Ic rm , .Ic delete . .It Ic rlog Print out history information for a module. .It Ic rtag Add a symbolic link to a module. .It Ic server Server mode. .It Xo Ic status .Op Fl lRv .Op Ar file ... .Xc The .Ic status command is used to display the state of checked out files. .Pp The .Fl l flag is used to limit the scope of the search to the local directory only and to disable recursive behaviour, which can be requested with the .Fl R flag. The .Fl v flag causes the symbolic tags for the file to be displayed. .Pp The following are the different possible states: .Bl -tag -width "Unresolved ConflictXX" .It Cm Locally Added The file has been added with the .Ic add command, but has not been committed to the repository with the .Ic commit command. .It Cm Locally Modified The file is up to date, but has been locally modified since then. .It Cm Locally Removed The file has been removed with the .Ic remove command, but has not been committed to the repository with the .Ic commit command. .It Cm Needs Checkout The file has not been modified; a new version is available. .It Cm Needs Merge The file has been modified and a newer version is available. A merge is necessary. .It Cm Needs Patch Same as .Ic Needs Checkout but, in client-server mode, only the differences are sent to save network resources. .It Cm Unresolved Conflict A merge has been done, but unresolved conflicts still remain. .It Cm Up-to-date The file is up to date. .El .Pp Aliases: .Ic st , .Ic stat . .It Xo Ic tag .Op Fl bdl .Op Fl r Ar old_tag .Op Ar symbolic_tag .Op Ar file ... .Xc .Pp Add a symbolic tag to a checked out version of .Ar file . .Pp The .Fl b flag is used to specify a branch tag. If the .Fl d flag is specified the tag will be deleted. The .Fl l flag is used to specify a local change only and disables the recursive behaviour. If the .Fl r flag is used, .Nm will only tag the files with .Ar symbolic_tag if they are already tagged with .Ar old_tag . When done, it will remove the old tag leaving only the new tag behind on exactly the same files. .Pp Aliases: .Ic ta , .Ic freeze . .It Xo Ic unedit Op Fl lR .Op Ar file ... .Xc .Pp The .Ic unedit command is used to give up an edition on a file and thus cancel the wanted temporary notifications. If the file has been modified since the .Ic edit command has been issued, .Nm will ask if you want to go back to the previous version, and lose the modifications done on the file, or stay in edition mode on it. .Pp The .Fl l flag is used to limit the scope of the search to the local directory only and to disable recursive behaviour, which can be requested with the .Fl R flag. .It Xo Ic update .Op Fl ACdP .Op Ar file ... .Xc .Pp The .Ic update command is used to merge any of the changes that have occurred on the remote repository into the local one where the command was run. .Pp The .Fl A flag resets any sticky tags, dates, or kopts that have been set on the tree. The .Fl l flag is used to specify a local change only and disables the recursive behaviour. The .Fl P flag causes .Nm to prune any directories that have become empty as a result of the update. .Pp For each file updated, a single letter prefix is given to specify the state of the file. The possible prefixes are as follows: .Bl -tag -width "XXX" .It \&? The file is unknown to .Nm . .It A The file has been added with the .Ic add command, but has not been committed to the repository with the .Ic commit command. .It C A merge, with a more recent version of the file, has been done, but unresolved conflicts still remain. .It M The file has been locally modified; if a more recent version is available, the merge has been done without conflict. .It P The same as .Sq U , but, in client-server mode, only differences are sent to save network resources. .It R The file has been removed with the .Ic remove command, but has not been committed to the repository with the .Ic commit command. .It U The file is up to date. .El .Pp Aliases: .Ic up , .Ic upd . .It Ic version Causes .Nm to print its version information. If this command is issued within a local copy of a remote repository or if either the .Ev CVSROOT environment variable or the .Fl d flag specify a remote repository, .Nm will also connect to the server and ask it to print its version information. .Pp Aliases: .Ic ve , .Ic ver . .It Xo Ic watch .Ar on | off | add | remove .Op Fl lR .Op Fl a Ar action .Op Ar file ... .Xc .Pp The .Ic watch command switches a file from normal mode to pseudo-lock mode as well as handling the notifications associated with it. Pseudo-lock mode means knowing who is editing a file: for that, .Nm extracts the file in read-only mode. Users must use the .Ic edit command to get the editing rights on the file. .Pp One of the following arguments to the .Ic watch command is mandatory: on, off, add, or remove. .Ar on switches the file into pseudo-lock mode; .Ar off switches it back to normal mode; .Ar add adds notifications for specific actions on the file; .Ar remove removes those notifications. .Pp The notifications are permanent. They remain in place until the .Ic watch remove command is issued while the temporary notifications are made available with the .Ic edit command. .Pp The .Fl l flag is used to limit the scope of the search to the local directory only and to disable recursive behaviour, which can be requested with the .Fl R flag. The .Fl a flag specifies the permanent notification wanted for .Ar add | remove : .Pp .Bl -tag -width "commitXX" -compact .It Cm commit Another user has committed changes to the .Ar file . .It Cm edit Another user is editing the .Ar file . .It Cm unedit Another user has finished editing the .Ar file . .It Cm all All of the above. .It Cm none No notification. .El .Pp If no speficiation is requested using the .Ar add or .Ar remove arguments, it implies the .Fl a Ar all option. .It Xo Ic watchers .Op Fl lR .Op Ar file ... .Xc .Pp The .Ic watchers command lists the users who asked for notifications as well as the notifications details. The possible notifications are as follows: .Bl -tag -width "tcommitXX" .It Cm commit Permanent watch of a commit of a new version of a file. .It Cm edit Permanent watch of the start of file edition. .It Cm tcommit Temporary watch of a commit of new version of a file. .It Cm tedit Temporary watch of the start of file edition. .It Cm tunedit Temporary watch of the end of file edition. .It Cm unedit Permanent watch of the end of file edition. .El .Pp The .Fl l flag is used to limit the scope of the search to the local directory only and to disable recursive behaviour, which can be requested with the .Fl R flag. .Pp The temporary watches are set using the .Ic edit command, until the .Ic commit or .Ic unedit command is issued on the .Ar file . .El .Sh ENVIRONMENT .Bl -tag -width CVS_CLIENT_LOG .It Ev CVS_CLIENT_LOG This variable enables logging of all communications between the client and server when running in non-local mode. If set, this environment variable must contain a base path from which two paths will be generated by appending ".in" to the value for the server's input and ".out" for the server's output. .It Ev CVS_RSH Name of the program to use when connecting to the server through a remote shell. The default is to use the .Xr ssh 1 program. .It Ev CVS_SERVER If set, gives the name of the program to invoke as a .Nm server when using remote shell. The default is to use `cvs'. .It Ev CVSEDITOR Name of the editor to use when editing commit messages. Checked before .Ev EDITOR and .Ev VISUAL . .It Ev CVSROOT When set, this variable should contain the string pointing to the root directory of the CVS repository. The contents of this variable are ignored when the .Fl d option is given or if `Root' files exist in the checked-out copy. .It Ev EDITOR Name of the editor to use when editing commit messages. This is traditionally a line-oriented editor, such as .Xr ex 1 . .It Ev VISUAL Name of the editor to use when editing commit messages. This is traditionally a screen-oriented editor, such as .Xr vi 1 . .El .Sh FILES .Bl -tag -width Ds .It Pa $HOME/.cvsrc File containing a list of implicit options to pass to certain commands. This file is read on startup unless the .Fl f option is specified. .It Pa $CVSROOT/CVSROOT Directory containing repository administrative files. .It Pa $CVSROOT/CVSROOT/loginfo File containing associations between modules and handlers for post-commit logging. .El .Sh SEE ALSO .Xr diff 1 , .Xr gzip 1 , .Xr patch 1 , .Xr rcs 1 , .Xr cvsrc 5 , .Xr cvsd 8 .Sh HISTORY The OpenCVS project is a BSD-licensed rewrite of the original Concurrent Versioning System written by Jean-Francois Brousseau. The original CVS code was written in large parts by Dick Grune, Brian Berliner and Jeff Polk. .Sh AUTHORS .An Jean-Francois Brousseau .An Vincent Labrecque .An Joris Vink .Sh CAVEATS This CVS implementation does not fully conform to the GNU CVS version. In some cases, this was done explicitly because GNU CVS has inconsistencies or ambiguous behaviour. Some things have also been left out or modified to enhance the overall security of the system. .Pp Among other things, support for the pserver connection mechanism has been dropped because of security issues with the authentication mechanism.