From ArchWiki

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Concurrent Versions System)

From https://www.nongnu.org/cvs/:

Concurrent Versions System is a version control system, an important component of Source Configuration Management (SCM). Using it, you can record the history of sources files, and documents. It fills a similar role to the free software RCS, PRCS, and Aegis packages.

More recent alternatives are listed at "Version control systems" category linked above.

Client

If you want to connect to a cvs server, install cvs and follow instructions from the owners of that server. For example openbsd.org/anoncvs

NOTE: there's a bug which some servers might require rsh which is not available on arch. You can force cvs to use ssh instead with the environment variable CVS_RSH=ssh.

$ export CVS_RSH=ssh
or before each command invocation
$ CVS_RSH=ssh cvs ...

Server

This is a quick guide on how to set up the latest CVS server.

Installation

Install cvs and xinetdAUR.

Create the cvs group - members of this group will have write access to the repository:

# groupadd cvs

Create the cvs user in the cvs group (-md makes the home directory):

# useradd -md /home/cvsroot -g cvs -p Insecure0 cvs

Initialization

Initialize your CVS repository (as cvs):

cvs% cvs -d /home/cvsroot init

The permissions on the directory (not the files inside, however) should be 2775 (drwxrwxr-x), but if not, run (as cvs):

cvs% chmod 2775 /home/cvsroot

Add any users that you want to have local access to the repository to the group cvs by using the following two steps. You can add pre-existing users to the cvs group with the command:

# gpasswd -a username cvs

Make a xinetd configuration file:

/etc/xinetd.d/cvspserver
service cvspserver
{
        port            = 2401
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = root
        passenv         = /home/cvsroot
        server          = /usr/bin/cvs
        server_args     = -f --allow-root=/home/cvsroot pserver
}

Ensure you have the following line in /etc/services (add it if not):

cvspserver 2401/tcp

Unset the HOME variable

# unset HOME

And restart xinetd.service.

Configuration

As the cvs user, create a passwd file in ~/CVSROOT. To add entries in the file you can use htpasswd commands (present in the apache package) as follows:

htpasswd -b filename username password

then edit the file and add the group, for example:

# Format is username:password:group

anonymous::
archie:HopefullySecure0:cvs
other:Insecure0:cvs

Now create a writers file in ~/CVSROOT, which grants write privileges to the users you created in passwd:

archie
other

Now create a readers file in ~/CVSROOT, which grants read privileges to the users you created in passwd:

anonymous
Note: If a user is present in the readers file they cannot have write access too.

Use

You can test out the server using the following commands:

export CVSROOT=:pserver:my_user_name@127.0.0.1:/home/cvsroot
cvs login
mkdir ~/sandbox
mkdir ~/sandbox/myproject
cd ~/sandbox/myproject
echo "this is a sample file" > myfile
cvs import -m "description of myproject" myproject v1 r1
cd ..
rm -R myproject
cvs checkout myproject
cd myproject
echo "some changes to the file" >> myfile
cvs commit -m "Explain changes here" myfile