LinuxCommandLibrary

cvs

Manage concurrent access to source code

TLDR

Create a new repository (requires the $CVSROOT environment variable to be set externally)

$ cvs -d [path/to/repository] init
copy

Add a project to the repository
$ cvs import -m "[message]" [project_name] [version] [vendor]
copy

Checkout a project
$ cvs checkout [project_name]
copy

Show changes made to files
$ cvs diff [path/to/file]
copy

Add a file
$ cvs add [path/to/file]
copy

Commit a file
$ cvs commit -m "[message]" [path/to/file]
copy

Update the working directory from the remote repository
$ cvs update
copy

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).

SEE ALSO

git(1), svn(1), rcs(1), co(1), ci(1), diff(1)

Copied to clipboard