checkin − rcs check-in utility


checkin [options] [file-specifications]


Checkin is an extension of the RCS utility ci. It uses the file’s modification date rather than the current date as the RCS delta-date.


Checkin uses the rcs utility ci. It is normally invoked from the rcsput script, but may be invoked in a standalone manner. Checkin differs from ci primarily in its treatment of the delta date: after invoking ci, checkin modifies the delta-date in the archive to reflect the file’s modification date.

This is the fundamental advantage offered by checkin. The ordinary rcs methodology uses the current date as the check-in date. This works well only for large projects in which a central project administrator is responsible for controlling the versions of source files. It does not work well for small projects, for which rcs’s primary advantage is its compact storage of multiple versions of a file.

By using the file’s modification date as a reference, you can more easily back up to a meaningful version − by date, rather than version number.

Archive Directory
If the archive directory (e.g., "./RCS") does not exist, checkin creates it before invoking the ci program.

Set-UID Operation
The rcs ci and co utilities work to a degree in set-uid mode (i.e., the "u+s" protection is set on the programs). However, the code assumes that the effective uid is root, and does not concern itself with maintaining file ownership.

The checkin package is able to run as a set-uid process for any particular user (e.g., the administrator of a project). For example, suppose that /proj is the location of project-specific tools, and is owned by admin. Then (running as the admin user):

cp checkin /proj         # admin now owns this copy
chmod 4755 /proj/checkin # sets u+s mode

Thereafter, users who invoke /proj/checkin will have the rights of admin − for this application. They may check into rcs any files which they own, into archives which admin owns. Checkin will maintain admin’s ownership of the archive files, and the user’s ownership of his working files.

If checkin does not need the set-uid rights (e.g., if the user already owns the archive), checkin resets its effective uid to the user’s. This permits a single copy of checkin to be used for both configuration management as well as individual developers.

Sharing RCS Archives
provides support for shared files by using rcs’s access lists, and providing special handling for set-uid operation:

When you first archive a file using checkin, it invokes the rcs administrative utility to initialize the access list of the file. It puts the effective user into the list.

If checkin is running in set-uid mode, it puts the real user on the access list as well.

With the access list is initialized, only those users who appear on an access list may place locks on files, even when running in set-uid mode.

Directory-Level Permissions
Before attempting to create or lock an archive file, checkin looks first for the directory-level permissions which may be set with the permit utility. If they exist, checkin limits further access rights to those permitted.


Checkin recognizes all of the "ci" options.

If the "−k" option is used, checkin supplies a default log-message


Options specific to checkin are:


directs checkin to ignore the baseline version. Normally, checkin supplies a default version number which augments that of ci, by looking at the baseline version.


causes it to display the actions it would perform, but not to do them (e.g., invocation of rcs and ci).


provide the check-in message in the given file. Normally ci prompts you for a multiline message.

If the input is not a terminal, checkin assumes that is a pipe, and passes the text (escaped) to ci. That is done best in a script. For random use, to supply the same check-in message for more than one file, the −M option lets you provide the message via a file.


Checkin is used exactly as one would use ci. Place a lock on the file using the "−l" option with ci (or with co) when you wish to edit a file. Check the file in using the "−u" option to retain a working copy after modification.


Checkin is a C-language program. It invokes ci (with an explicit path, to protect against mishaps in set-uid mode), and performs pre- and postprocessing of the archive and working file to determine the version to which the file’s modification date applies.

Checkin uses the following environment variables:

is used to specify a default value for initial revision numbers. If the user does not specify the initial version number of a file, ci assigns the value "1.1". This is used to support the use of module-level version numbers, while preserving the relationship between changes and revisions: a new version is made only if the file is changed.

The directory-level revision set by the permit utility may override this environment variable. See baseline and permit for more details.


is set to a string controlling the initial setting of the rcs "−c" option. For example, the strings

setenv RCS_COMMENT ’/.c/ *> /’


setenv RCS_COMMENT ’/.d/# /,/.bas/REM /’

define comment-prefixes for ".c", ".d" and ".bas" suffixes. (The suffix is delimited with the first "." in the leaf-name).


if defined, specifies the directory in which rcs archive files are found. Normally files are found in "./RCS".


is the POSIX time zone, which is overridden internally so that file modification dates are independent of the local time zone.


Checkin uses the following files


the RCS check-in program


the RCS administrative program




baseline, rcsput, permit, ded, ci (1), co (1), rcs (1)


Thomas E. Dickey <>