diff options
author | Dmitry Bogatov <KAction@debian.org> | 2018-11-10 03:09:43 +0000 |
---|---|---|
committer | Dmitry Bogatov <KAction@debian.org> | 2018-11-10 03:09:43 +0000 |
commit | 486f4254b69321ca468f4349c8f8384a651c03ae (patch) | |
tree | 0518772cc17a0754d7b22ba16486dd64b2419fae /src.asc |
New upstream version 1.20
Diffstat (limited to 'src.asc')
-rw-r--r-- | src.asc | 313 |
1 files changed, 313 insertions, 0 deletions
@@ -0,0 +1,313 @@ += src(1) = +:doctype: manpage + +== 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 single-file 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. + +== 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. Create/delete takes a + revision, defaulting to the current branch tip. List to all + revisions. + +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". Create/delete + takes a singleton revision, defaulting to the current branch tip. + List defaults to all revisions, including 0 (the trunk root phantom + revision). + +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 [(-<n>|-l <n>)] [-f 'fmt'] ['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. See 'help + list' for information about custom formats. Use '-<n>' or '-l <n>', + where <n> is a number, to limit the listing length. Default range + is the current branch, reversed. "li" is a synonym for "list". + +src log [-v] [(-<n>|-l <n>)] [(-p|-u|-c) [-b|-w]] ['revision-range'] ['file'...]:: + Sends log information about the specified commits to standard + output. Use '-<n>' or '-l <n>', where <n> is a number, to limit the + listing length. Default range is the current branch, reversed. + The '--patch', '-p' or '-u' option additionally sends a + unified format diff listing to standard output for each revision + against its immediate ancestor revision; '-c' emits a context diff + instead. When generating a diff, '-b' ignores changes in whitespace, + and '-w' ignores all whitespace. Histories imported via + 'fast-import' (when not using its '-p' option) have RFC-822-style + headers inserted into the log comment to preserve metadata not + otherwise representable in SRC, such as distinct author and + committer identifications and dates. These headers are normally + suppressed by 'log', however, '-v' shows a summarized view of + important headers; '-v -v' shows all headers as-is. + +src diff [(-u|-c) [-b|-w]] ['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. + The actual difference generation is done with diff(1). The default + diff format is '-u' (unified), but if you specify a '-c' option + after the verb a context diff will be emitted. '-b' ignores changes + in the amount of whitespace, and '-w' ignores all whitespace. + "di" is a synonym for "diff". + +src ls:: + List all registered files. + +src visualize:: + Emit a DOT visualization of repository structures. To use this, + install the graphviz package and pipe the output to something like + "dot -Tpng | display -". "vis" is a synonym for "visualize". + +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 for "copy". + +src fast-export ['revision-range'] ['file'...]:: + Export one or more projects as a Git fast-import stream. For a + history originally imported from elsewhere, author and committer + identification is gleaned from the RFC-822-style headers inserted + into the commit comment by 'fast-import' (if its '-p' option was not + used). Otherwise, this information 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) state. + +src version:: + Report the versions of SRC, the underlying Python, and the back end. + +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 ('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 "src status", but the output of 'src status +*' will list them with status "I". + +== BACKWARD COMPATIBILITY == + +SRC history files are (normally) RCS master files. SRC maintains no +permanent state other than these files. + +SRC takes over the little-used "description" field of RCS (and SCCS) +master files to store some state that makes status checks faster. If +you try to use SRC to edit a pre-existing RCS- or SCCS-registered file +with a non-empty description field, SRC will refuse to step on the old +description; you must clear it manually. + +In order to maintain complete backwards compatibility, one other +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. + +The RCS back end will be automatically selected when there is an ".src" +or "RCS" subdirectory. + +You can explicitly select the RCS back end by making the first command +keyword on the src command line be 'rcs'. This should only be necessary +when your working directory contains two or more of the subdirectories +".src", "RCS", and "SCCS". + +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. + +== WORKING WITH SCCS == + +Using SCCS as a back end is also supported, with some limits due to +missing features in SCCS: + +* all commands relating to tags and branches throw an error. + +* src cat does not necessarily pipe out binary data correctly. + +* the exec bit is not propagated between master and workfile. + +The SCCS back end will be automatically selected when there is an "SCCS" +subdirectory and no ".src" or "RCS" subdirectory. + +You can explicitly select the SCCS back end by making the first command +keyword on the src command line be 'sccs'. This should only be +necessary when your working directory contains none or two or more of +the subdirectories ".src", "RCS", and "SCCS". + +Working with SCCS requires an "SCCS" subdirectory; SRC will quietly +create one, if required, then operate on the files in the "SCCS" +directory in a completely backward-compatible way. + +Fast-import to SCCS is not supported. + +The SCCS mode is not recommended unless you have a specific need to +work with legacy SCCS repositories. Up-converting them to something +less Paleolithic would be a better idea; in truth, the SCCS support +exists mainly because it's hilarious (for obscure hacker values of +'hilarious'). + +== DEBUGGING OPTIONS == + +These will be of interest mainly to developers. + +A '-d' (debug) option before the main command word turns on debugging +messages. Just one "-d" gives you complete visibility about what +commands the back end is running. It can be repeated for higher +debugging levels that expose more of src's internal computation. + +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". It is for regression +testing. + +== REQUIREMENTS == + +SRC is written in Python and requires 2.7 or later; it will run under +Python 3.x. + +If you wish to use the RCS support, the RCS tools at version 5.7 or +later must be installed and accessible in your path. + +If you wish to use the SCCS support, the CSSC (Compatibly Stupid Source +Control) system must be installed and accessible in your path. + +The rcs-fast-import(1) tool at version 1.0 or later is required to +support the 'src fast-import' command. + +src will die gracefully with a useful error message when it fails +due to a missing back end. + +== LIMITATIONS == + +Branch deletions change the revision numbers of revisions downstream of +the branch join. This behavior may change in a future release. + +The SCCS backend has a Y2.1K problem that SRC cannot effectively work +around and will probably not be fixed. + +== 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), rcs-fast-import(1), sccs(1), svn(1), git(1), dot(1). |