Cmiss CVS Overview


On the esu* system

If you are using a computer on the esu* system, /product/cmiss should be mounted, and you need to be a member of the cmiss group on your machine (check with the groups command). If this is the case then all you need to do to set up is set the CVSROOT environment variable to specify your connection to cvs.

For cmiss on the esu* system we use /product/cmiss/cvs, so set CVSROOT to this. e.g.
(csh, tcsh) setenv CVSROOT /product/cmiss/cvs
(bash, ksh, zsh) export CVSROOT=/product/cmiss/cvs
You may want to do this in your shell startup file.

On other systems

If you are not using a computer on the esu* system or may not always have /product/cmiss mounted when you want to use cvs, then you should use the Pserver through an ssh tunnel. You need to be a member of the cmiss group on esu1.

You need to use an ssh tunnel. If someone else has already set up an appropriate ssh tunnel on your machine then you don't have to do anything additional to use their tunnel. You can check this with ps -ef | grep 2401. If there is no appropriate tunnel already set up then you need to set up one as described below.

Set the CVSROOT environment variable to :pserver:USERNAME@localhost:/product/cmiss/cvs with USERNAME replaced with your username on esu1. (You can omit USERNAME@ if it is the same as your username on the client machine.) You may want to do this in your shell startup file.

Log in to the pserver using cvs login. You will be required to enter your password for esu1. The login details are saved in $HOME/.cvspass so won't need re-entering unless you cvs logout.

You are now ready to use cvs in (almost) the same way as in the repository were mounted locally.

Setting up an ssh tunnel

Connect to esu1 using ssh port forwarding for the pserver port 2401. You can use the following command with USERNAME replaced with your esu1 username:
ssh -2 -f -N -L
(You can omit USERNAME@ if it is the same as your username on the client machine, and you can abbreviate to esu1 if the client machine is in the same domain. You can bundle the options with version 3.1p1 or later.) The -f option places ssh in the background after login.

While this connection is active you can access the pserver, and in fact anyone on your machine can use your tunnel to connect to the pserver on esu1. You can now use cvs as if you have a pserver on your own machine; the ssh connection will forward this to esu1.


Use cvs h for a list of cvs subcommands, cvs -H subcommand for help on a subcommand, or cvs --help-options for help on global cvs options, or check the documentation.

cvs checkout

This command gets you started with cvs. Before you can do much with cvs you need to `checkout' a working directory. The working directory is made in the current directory and is given the same name as the repository unless specified with the -d option. Go where you want the base of your working directory to be and checkout the things you want to edit.


If you have created a working directory by checking out a subset of files (i.e. you have specified files not a directory), then you can check out and release more files with cvs update described below.

The documentation on cvs checkout describes further options.

cvs update

This command gets your checked out code up to date. It will automatically merge anyone elses changes to the repository into your code. It is guaranteed to preserve anything you have done. You start cvs update at any point in a checked out tree and it will recursively descend through any cvs controlled sub directories too.

Many suffixes are ignored (all *.o *~ files etc. are ignored). Every other file is compared to the repository. If nothing has changed locally or in the repository it is passed over silently. In each other case a symbol is used to explain the status/changes.


esu48:blackett 1582% cvs update
cvs update: Updating .
M cmgui.c
M cmgui.imake
? date.h
? yesterday
? cmgui_sgi.make
? object
? cmgui.imake.perl
? cmgui_sgiperl.depend
? cmgui_sgi_memorycheck.make
? cmgui_sgiperl.make
? cmgui_sgi_memorycheck.depend.tmp
? object.list
? cmgui_sgioptimised.make
? cmgui_sgif90.make
? cmgui_linux.make
? unemap_sgi.make
? cmgui_linux_optimised.make
? unemap_linux.make
cvs update: Updating comfile
M comfile/comfile_window.c
cvs update: Updating command
M command/cmiss.c
M command/cmiss.h
M command/parser.c
? command/cmiss_modify_new.c
A command/f90_interpreter.h
A command/f90_interpreter.c
? command/Perl_cmiss.pmh
? command/Perl_cmiss
? command/perl_interpreter.h
cvs update: Updating finite_element
cvs update: Updating general
M general/child_process.c
M general/image_utilities.c
? general/
cvs update: Updating graphics
M graphics/import_graphics_object.c
M graphics/import_graphics_object.h
M graphics/texture.c
? graphics/scene_viewer.c.conflict
cvs update: Updating link
cvs update: Updating mirage
? mirage/tracking_socket_linux_test_log
? mirage/tracking_socket_linux_test
? mirage/tracking_socket_test.c
? mirage/tracking_socket_test_log
? mirage/tracking_socket_test
cvs update: Updating slider
cvs update: Updating user_interface
M user_interface/filedir.c
M user_interface/message.c

The -n option for cvs prevents cvs from modifying any files. cvs -n update shows what a cvs update would do, and is therefore useful for giving the status of the working directory.

If an entire working directory has been checked out (i.e. a directory has been specified for cvs checkout), cvs update will check out any new files that have been added to the repository.

If only a subset of files have been checked out into the working directory, additional files may be checked out using cvs update file. If you no longer want a file in your working directory it can be released using cvs update -r 0 file. This command updates the revision of file in your working directory to revision 0. Revision 0 does not exist so it removes file from your working directory. If you have made changes to file, it will not be deleted and a conflict will be reported.

The documentation on cvs update describes further options.

cvs log

This command tells you about changes that have been made to the repository.

The -d option allows you to list changes between a range of dates. (D1 < D2 for all changes between a range of dates, D for latest since a certain date). CVS understands lots of date formats including yesterday, "last week",


The documentation on cvs log describes further options.

Making changes

If you don't supply a message with your commit, cvs will start an editor for you to write and save a log message before exiting. cvs looks for an editor in the environment variables CVSEDITOR then EDITOR. If you don't like using vi, then make sure you set one of these variables to your favourite editor.

Shane Blackett, Karl Tomlinson