Name

src — simple revision control

Synopsis

src [command] [revision-spec] [file…]

DESCRIPTION

SRC (or src) is simple revision control, a version-control system for single-file projects by solo developers and authors. It modernizes the venerable RCS, hence the anagrammatic acronym. The design is tuned for use cases like all those little scripts in your ~/bin directory, or a directory full of HOWTOs.

SRC revision histories are single, human-readable files beneath a hidden .src subdirectory in the directory where they live. There may be multiple histories under one directory; SRC treats them as separate projects, and history files can be moved elsewhere at any time.

SRC gives you simple, consecutive integer revision numbers. It supports tags and branching. It does not show committer information, because the committer is always you. The command set is intended to look familiar if you have ever used Subversion, Mercurial, or Git.

SRC interprets the EDITOR variable in the usual way, using it to spawn an editor instance when you perform a commit or amend.

SRC is fully supported in Emacs VC mode, though at time of writing only in the development tree.

COMMAND SUMMARY

A revision is a 1-origin integer, or a tag name designating an integer revision, or a branch name designating the tip revision of its branch. Revision numbers always increase in commit-date order.

A revision range is a single revision, or a pair of revisions M-N (all revisions numerically from M to N) or M..N (all revisions that are branch ancestors of N and branch successors of M).

If src complains that your revision spec looks like a nonexistent filename, you can prefix it with @ (this is always allowed). @ by itself means the current (checked-out) revision.

Unless otherwise noted under individual commands, the default revision is the tip revision on the current branch and the default range is all revisions on the current branch.

The token "--" tells the command-line interpreter that subcommands, switches, and revision-specs are done - everything after it is a filename, even if it looks like a subcommand or revision number.

src help [command]
Displays help for commands.
src commit [- | -m string | -f file | -e] [file…]
Enters a commit for specified files. Separately to each one. A history is created for the file if it does not already exist. With -, take comment text from stdin; with -m use the following string as the comment; with -f take from a file. With -e, edit even after -f or -m. "ci" is a synonym for commit.
src amend [- | -m string | -f file | -e] [revision] [file…]
Amends the stored comment for a specified revision, defaulting to the latest revision on the current branch. Flags are as for commit. "am" is a synonym for "amend".
src checkout [revision] [file…]
Refresh the working copy of the file(s) from their history files. "co" is a synonym for checkout.
src cat [revision] [file…]
Send the specified revision of the files to standard output.
src status [-a] [file…]
A = added, = = unmodified, M = modified, ! = missing, ? = not tracked, I = ignored, L = locked (recover with src checkout). The A and L statuses should only occur if you have used RCS directly on a file. Normally ? and I files are not listed; this changes if you either give the -a switch or specify which files to look at. "st" is a synonym for status.
src tag [list|-l|create|-c|delete|del|-d] [name] [revision] [file…]
List tags, create tags, or delete tags. Takes a singleton revision, defaulting to the current branch tip.
src branch [list|-l|create|-c|delete|del|-d] [name] [file…]
List, create, or delete branches. When listing, the active branch is first in the list. The default branch is trunk.
src rename [tag|branch] [oldname] [newname] [file…]
Rename a tag or branch. Refuses to step on an existing symbol or rename a nonexistent one. rn is a synonym for rename.
src list [revision-range] [file…]
Sends summary information about the specified commits to standard output. The summary line tagged with * is the state that the file would return to on checkout without a revision-spec. "li" is a synonym for "list".
src log [revision-range] [file…]
Sends log information about the specified commits to standard output.
src diff [revision-range] [file…]
Sends a diff listing to standard output. With no revision spec, diffs the working copy against the last version checked in. With one revno, diffs the working copy against that stored revision; with a range, diff between the beginning and end of the range. "di" is a synonym for "diff".
src ls
List all registered files.
src move old new
Rename a workfile and its history. Refuses to step on existing workfiles or histories. mv is a synonym for move.
src copy old new
Copy a file and its master. Refuses to step on existing files or masters. cp is a synonym.
src fast-export [revision-range] [file…]
Export one or more projects as a git fast-import stream. The committer identification is copied from your Git configuration.
src fast-import [-p] [files…]
Parse a git-fast-import stream from standard input. The modifications for each individual file become separate SRC histories. Mark, committer and author data, and mark cross-references to parent commits, are preserved in RFC-822-style headers on log comments unless the -p (plain) option is given, in which case this metadata is discarded. Give arguments to restrict the files imported.
src release [file…]
Release locks on files. This is never necessary in a normal workflow, which will be repeated edit-commit cycles, but it may be handy if you have to interoperate with other tools that expect RCS masters to be in their normal (unlocked) stare.
src version
Report the version of src.

The omission of src remove is a deliberate speed bump.

If no files are specified, all eligible files are operated on in sequence.

NOISE CONTROL

Silence is golden. When you have selected only one file to operate on, and the command is not a report generator (status, cat, log, list, fast-export, the listing modes of tag and branch, ls) you will see a reply only if the operation failed.

Other commands (add, commit, checkout, tag creation and deletion) give you a success message per file when operating on multiple files, so you will not be in doubt about which operation succeeded. This behavior can be suppressed with the -q option, placed before the subcommand word.

If your directory contains a file named ".srcignore", each line that is neither blank nor begins with a "#" is interpreted as an ignore pattern. It is expanded with glob(3), and files in the expansion are omitted from src status - unless the file is named as an argument, of the status command, in which case its status is "I". Thus, for example, a line reading "*.html" will cause all files with an HTML extension to be omitted from the output of "git status", but the output of "git status *" will list them with status "I".

BACKWARD COMPATIBILITY

SRC history files are RCS master files. SRC maintains no permanent state other than these files. It keeps some transient state as stamp files to speed up src status.

In order to maintain complete backwards compatibility, one compromise was made: any commit comment containing a string exactly matching an RCS log delimiter (a long string of "-" characters) will be rejected as malformed.

By default, history files are kept in a hidden subdirectory named ".src". But if you have an RCS subdirectory and no .src, SRC will quietly operate on the files in the RCS directory in a completely backward-compatible way.

DEBUGGING OPTIONS

These will be of interest mainly to developers.

A -d (debug) option before the main command word turns on debugging messages; it can be repeated for higher debugging levels.

A -S (sandbox) option can be used to set the repository directory to something other than its default of ".src".

A -T option sets up an artificial clock that ticks once on each revision and fixes the user information to be used in fast-export; It also attributes all commits to J. Random Hacker and sets a constant screen width of 79. It’s for regression testing.

REQUIREMENTS

SRC is written in Python and requires 2.7 or later. The RCS tools at version 4 or later must be installed and accessible on your path. The rcs-fast-import(1) tool at version 1.0 or later is required to support the src fast-import command.

LIMITATIONS

Branch deletions change the revision numbers of revisions downstream of the branch join. This behavior may change in a future release.

REPORTING BUGS

Report bugs to Eric S. Raymond <esr@thyrsus.com>. The project page is at http://catb.org/~esr/src

SEE ALSO

rcs(1).