Chapter 2. The Repository

Table of Contents

Telling CVS where your repository is
How data is stored in the repository
Where files are stored within the repository
File permissions
The attic
The CVS directory in the repository
CVS locks in the repository
How files are stored in the CVSROOT directory
How data is stored in the working directory
The administrative files
Editing administrative files
Multiple repositories
Creating a repository
Backing up a repository
Moving a repository
Remote repositories
Server requirements
Connecting with ssh
Using 3rd party clients via the extnt wrapper
Direct connection with password authentication
Direct connection with GSSAPI
Connecting with fork
Using repository aliases

The cvsnt repository stores a complete copy of all the files and directories which are under version control.

Normally, you never access any of the files in the repository directly. Instead, you use cvsnt commands to get your own copy of the files into a working directory, and then work on that copy. When you've finished a set of changes, you check (or commit) them back into the repository. The repository then contains the changes which you have made, as well as recording exactly what you changed, when you changed it, and other such information. Note that the repository is not a subdirectory of the working directory, or vice versa; they should be in separate locations.

cvsnt can access a repository by a variety of means. It might be on the local computer, or it might be on a computer across the room or across the world. To distinguish various ways to access a repository, the repository name can start with an access method. For example, the access method :local: means to access a repository directory, so the repository :local:/usr/local/cvsroot means that the repository is in /usr/local/cvsroot on the computer running cvsnt. For information on other access methods, see the section called “Remote repositories”.

If the access method is omitted, then if the repository does not contain @, then :local: is assumed. If it does contain @ then :ext: is assumed. For example, if you have a local repository in /usr/local/cvsroot, you can use /usr/local/cvsroot instead of :local:/usr/local/cvsroot.

The repository is split in two parts. $CVSROOT/CVSROOT contains administrative files for cvsnt. The other directories contain the actual user-defined modules.

Telling CVS where your repository is

There are several ways to tell cvsnt where to find the repository. You can name the repository on the command line explicitly, with the -d (for "directory") option:

cvs -d /usr/local/cvsroot checkout yoyodyne/tc

Or you can set the $CVSROOT environment variable to an absolute path to the root of the repository, /usr/local/cvsroot in this example. To set $CVSROOT, csh and tcsh users should have this line in their .cshrc or .tcshrc files:

setenv CVSROOT /usr/local/cvsroot

sh and bash users should instead have these lines in their .profile or .bashrc:

CVSROOT=/usr/local/cvsroot
export CVSROOT

It is common for cvs frontends to set this up automatically. On most frontends there will be a dialog box which prompts you for the CVSROOT when it is first configured.

A repository specified with -d will override the $CVSROOT environment variable. Once you've checked a working copy out from the repository, it will remember where its repository is (the information is recorded in the CVS/Root file in the working copy).

The -d option and the CVS/Root file both override the $CVSROOT environment variable. If -d option differs from CVS/Root, the former is used. Of course, for proper operation they should be two ways of referring to the same repository.