rcs-fast-import — unpack a fast-import stream into an RCS repository tree


rcs-fast-import [-v] [-u] [-l] [-p] [-V] [-?] file...


This tool breaks the content of a git-fast-import stream on stdin into individual RCS master files in RCS subdirectories of the corresponding directory structure.

Normally, all import-stream per-commit metadata that RCS cannot represent natively is written into each comment as RFC-822 mail headers, followed by a blank line; this includes mark, committer and author data, mark cross-references to parent commits, and extension properties. The -p option suppresses this, producing a plain RCS comment.

With the -v option, emit a twirling-baton prompt during stream read and do not suppress progress messages from the RCS tools.

With the -l option, check out and lock all resulting files at their latest revisions; with the -u option, check out but do not lock. With neither option, the RCS subdirectories and masters are created but no working copies checked out.

The -V option displays the program version number and exits. -? displays a help message and exits.

In order to preserve history, D file operations do not delete previously-created master files; instead, an empty file is checked in as the content and the file's RCS state tag is set to "Deleted". R file operations copy corresponding RCS master files without deleting the old master file; instead, an empty file is checked in as the content and the state set to "Renamed". C operations initialize a new file.

Import-stream branches are mapped to RCS revision branch structure. Each RCS master produced will include a list of branch tags, each of which has the value of the corresponding RCS branch identifier for that file.

Normally all files are unpacked. You can restrict this by listing the paths you are interested in on the command line.


The following limitations are inherent in the RCS format:

Annotated tags cannot be preserved in a format readily accessible to RCS. This tool deposits them as tagged revisions of a file named ANNOTATED-TAGS in the toplevel RCS directory.

In each commit, the committer date entered in RCS metadata will be the committer date from the import stream, but the committer identity will be lost; all commits are checked in as if by the invoking user and identified with the invoking user's login name. (However, this tool preserves complete attribution in comment headers unless the -p option was selected.)

Lightweight tags and branches may cause errors in older RCS versions, as they are saved with their full (path) names, including slashes.

Submodule links ("M" entries with mode 160000) and symlinks ("M" entries mith mode 120000) can't be handled; the tool will throw an error if it sees one.

The following are implementation limits of this tool which may be fixed in a future release:

This tool has not been tested with RCS versions earlier than 5.7. It is likely older versions will throw errors on some tag and branch names that are legal in fast-import files.


Returns 1 on any error, 0 otherwise.


Eric S. Raymond ; project page at