Cvs /

Intro

Checkout code

In CVS, you check out a repo to download its files:

$ cvs -d anoncvs@example.com:/cvs checkout -P module

You want to replace anoncvs@example.com with the username and hostname for the repo.

You'll also want to verify the SSH fingerprints. IRCNow publishes a list of known SSH fingerprints.

For example, to check out code for ircnowd from anoncvs@anoncvs.ircnow.org, you'd run:

$ cvs -d anoncvs@anoncvs.ircnow.org checkout -P ircnowd

The checkout commands produce a copy of the code in the working directory.

Commit new code

Once you checkout a CVS repo, you can edit the code and save your changes. Until you commit your code, however, none of the updates will be saved in the CVS repository. WARNING: Any code that is not committed will not be saved in the CVS repo.

When you are ready to commit your code, type:

$ cvs commit

You will be given a text editor (usually vi) to leave a commit message.

To commit and also write the message in a single command, type:

$ cvs commit -m "Your commit message goes here"

Update code

To update your working directory with new code from the repository, type:

$ cvs update

Add new files

WARNING: If you create a new file in your working directory, it will not automatically be added to the CVS repository. You must first run:

$ cvs add filename

Replace filename with your real filename.

Then, you must commit your changes with:

$ cvs commit

Note: cvs add is only used for adding new files to a module that has already been checked out. If you want to add a new project to the repository, use cvs import as described in Import New Repo.

Remove files

To remove files from the CVS repo, it is not enough to simply delete them from the working directory. You will also want to remove them from the CVS repository:

$ cvs remove filename

Afterwards, you must commit this change to delete it from the repository:

$ cvs commit

Setting CVSROOT

When working with CVS, it helps to set the CVSROOT, the path where the cvs folders are located:

You can set it for just the current shell:

$ export CVSROOT="anoncvs@example.com:/cvs"

If CVS is local, you can use a file path:

$ export CVSROOT="/home/username/CVS"

As a shortcut, you can add this to the bottom of your ~/.profile so you don't have to type it each time:

$ echo 'CVSROOT="anoncvs@example.com:/cvs"' >> ~/.profile

Once CVSROOT is set, you can then omit the -d argument for checking out and committing code.

So the checkout code above becomes more simple:

$ cvs checkout -P module

Any time you check out code, the CVSROOT is automatically provided for the code in the working directory. So, it was not necessary to specify the CVSROOT for the commit command.

Create New Repo

To create a new CVS repository, type:

$ cvs -d /path/to/CVS/ init

Replace /path/to/CVS/ with where you want the CVS repository to be located. For example, you might put it in ~/CVS.

Import New Module

If you have existing code that you'd like to import to a CVS repository, first change to the folder containing the source code, then type:

$ cvs import reponame vendortag releasetag

Replace reponame, vendortag, and releasetag. CVS will put the source files inside a directory named reponame inside the CVS root directory. vendortag should be replaced with the vendor (the author) of the repository. releasetag is the tag for the specific release.

For example:

$ cd ~/ircnowd/
$ cvs import ircnowd ircnow start

Note: CVS does not automatically transform the imported source code into a working directory. As a result, any changes you make to the original source code directory cannot be committed to the CVS repo.

To fix this, you will need to checkout the source code. Change your directory to somewhere else to place the new working directory, then type:

$ cvs -d /path/to/CVS/ checkout -P reponame

Replace reponame with the repository name. Then, change directory to reponame to make changes. Afterwards, use cvs to commit them.

If checkout works properly, you can safely delete the old source code directory you imported from (since that one is not tracked by CVS).

Export code

Eventually, when you are ready to use the code, you want to remove all the CVS-related files. To export code for use:

$ cvs -d anoncvs@example.com:/cvs export -D YYYYMMDD module

Replace YYYYMMDD with the year, month, and day of the version of the repository you want to export. Replace module with the module name.

Troubleshooting

If you see this error message:

cvs [commit aborted]: received broken pipe signal

It may be because CVS was waiting for you to connect but your connection took too long. This can happen if you take too long to send a commit message or you take too long to provide passwords for your ssh keys. If this happens, try to find ways to avoid interactive input. For example, you might consider using the -m argument with cvs commit.

cvs [server aborted]: cannot make directory /var/cvs/module: Permission denied

This error message means that /var/cvs either doesn't exist or has the wrong permissions. If you're running cvs inside a chroot, check var/cvs inside the chroot. It needs to exist and be owned by the group commit and set to group writeable.