cvs
Manage concurrent access to source code
TLDR
Create a new repository (requires the $CVSROOT environment variable to be set externally)
Add a project to the repository
Checkout a project
Show changes made to files
Add a file
Commit a file
Update the working directory from the remote repository
SYNOPSIS
cvs [global-options] command [command-options] [arguments]
PARAMETERS
-q
quiet, suppress most messages
-Q
really quiet, suppress all messages
-l
local directory only, do not recurse
-R
recurse into subdirectories
-n
do not run anything, just show what would happen
-t
trace execution
-r
make repository read-only
-f
ignore ~/.cvsrc file
-d repos
use repos as repository location
-j suffix
merge changes from branch/tag suffix
-s var=value
set CVS static variable
-e editor
specify editor for log messages
-z level
compress transmissions at gzip level level
-v, --version
print version info
-H, --help
print help
DESCRIPTION
CVS (Concurrent Versions System) is a client-server version control system designed for collaborative software development. It maintains a central repository storing file revisions, histories, branches, and tags. Developers checkout working copies, make changes, and commit them back, with CVS handling conflicts via merge tools. Key features include atomic commits, keyword substitution (e.g., $Id$), support for binary files, and access methods like pserver, SSH (ext), or Kerberos. Workflows support tagging releases, branching for features, and vendor branches for imports. While revolutionary in the 1990s for projects like the Linux kernel, CVS's centralized model limits scalability and offline work. Modern alternatives like Git offer distributed control. CVS remains on many Unix systems for legacy use but requires caution due to inactivity and security risks. (148 words)
CAVEATS
Obsolete and unmaintained since ~2008; vulnerable pserver mode (use SSH/ext); poor large-repo performance; no built-in rename support; avoid for new projects.
COMMON SUBCOMMANDS
checkout [-d]: retrieve module(s)
update [-dAP]: bring files up to date
commit [-m]: check in changes
add [-kb]: add file(s)
remove [-f]: remove file(s)
diff [-u]: show differences
CVSROOT SETUP
Set $CVSROOT to repository, e.g., :pserver:user@host:/repo or :ext:host:/repo (SSH). Run cvs login for password auth.
HISTORY
Originated 1982 by Dick Grune as RCS wrapper. Rewritten 1989 by Brian Berliner for concurrency. Gained popularity in 1990s for open source (Linux, GCC). Peaked early 2000s; declined with Subversion/Git. Last major release 1.12.13 (2008).


