Annotation of src/usr.bin/rcs/rcs.1, Revision 1.58
1.58 ! guenther 1: .\" $OpenBSD: rcs.1,v 1.57 2011/11/17 18:54:21 jmc Exp $
1.1 deraadt 2: .\"
3: .\" Copyright (c) 2005 Jean-Francois Brousseau <jfb@openbsd.org>
1.22 jmc 4: .\" Copyright (c) 2005 Xavier Santolaria <xsa@openbsd.org>
1.1 deraadt 5: .\" All rights reserved.
6: .\"
7: .\" Redistribution and use in source and binary forms, with or without
8: .\" modification, are permitted provided that the following conditions
9: .\" are met:
10: .\"
11: .\" 1. Redistributions of source code must retain the above copyright
12: .\" notice, this list of conditions and the following disclaimer.
13: .\" 2. The name of the author may not be used to endorse or promote products
14: .\" derived from this software without specific prior written permission.
15: .\"
16: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
17: .\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
18: .\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
19: .\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20: .\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21: .\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22: .\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23: .\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24: .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25: .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26: .\"
1.58 ! guenther 27: .Dd $Mdocdate: November 17 2011 $
1.1 deraadt 28: .Dt RCS 1
29: .Os
30: .Sh NAME
31: .Nm rcs
32: .Nd RCS file management program
33: .Sh SYNOPSIS
34: .Nm
1.47 niallo 35: .Op Fl IiLqTUV
1.14 xsa 36: .Op Fl A Ns Ar oldfile
1.7 niallo 37: .Op Fl a Ns Ar users
38: .Op Fl b Ns Op Ar rev
1.12 xsa 39: .Op Fl c Ns Ar string
1.7 niallo 40: .Op Fl e Ns Op Ar users
1.9 xsa 41: .Op Fl k Ns Ar mode
1.24 ray 42: .Op Fl l Ns Op Ar rev
1.33 jmc 43: .Oo Fl m Ns Ar rev :
1.20 xsa 44: .Ar msg Oc
1.19 xsa 45: .Op Fl o Ns Ar rev
1.56 sobrado 46: .Op Fl t Ns Op Ar str
1.24 ray 47: .Op Fl u Ns Op Ar rev
1.15 xsa 48: .Op Fl x Ns Ar suffixes
1.30 jmc 49: .Ar
1.1 deraadt 50: .Sh DESCRIPTION
1.22 jmc 51: Revision Control System (RCS) is a software tool which lets people
52: manage multiple revisions of text that is revised frequently, such as
53: source code or documentation.
54: .Pp
1.1 deraadt 55: The
56: .Nm
57: program is used to create RCS files or manipulate the contents of existing
58: files.
1.22 jmc 59: A set of helper tools is also available:
60: specific revisions of files may be checked in or out, using
61: .Xr ci 1
62: and
63: .Xr co 1 ;
64: differences between revisions viewed or merged, using
65: .Xr rcsdiff 1
66: and
67: .Xr rcsmerge 1 ;
68: and information about RCS files and keyword strings displayed using
69: .Xr rlog 1
70: and
71: .Xr ident 1 .
72: See the respective manual pages for more information
73: about these utilities.
1.1 deraadt 74: .Pp
75: The following options are supported:
76: .Bl -tag -width "-e usersXX"
1.14 xsa 77: .It Fl A Ns Ar oldfile
78: Append the access list of
79: .Ar oldfile
80: to the access list of the RCS files.
1.7 niallo 81: .It Fl a Ns Ar users
1.1 deraadt 82: Add the usernames specified in the comma-separated list
83: .Ar users
84: to the access list of the RCS files.
1.7 niallo 85: .It Fl b Ns Op Ar rev
1.45 jmc 86: Set the default branch (see below) to
1.14 xsa 87: .Ar rev .
1.45 jmc 88: If no argument is specified,
89: the default branch is set to the highest numbered branch.
1.12 xsa 90: .It Fl c Ns Ar string
91: Set comment leader to
92: .Ar string .
1.41 jmc 93: The comment leader specifies the comment character(s) for a file.
94: This option is useful for compatibility with older RCS implementations
95: only.
1.7 niallo 96: .It Fl e Ns Op Ar users
1.1 deraadt 97: Remove the usernames specified in the comma-separated list
98: .Ar users
99: from the access list of the RCS files.
100: If
101: .Ar users
102: is not specified, all users are removed from the access list.
1.20 xsa 103: .It Fl I
104: Interactive mode.
1.1 deraadt 105: .It Fl i
1.10 xsa 106: Create and initialize a new RCS file.
1.11 jmc 107: If the RCS file has no path prefix, try to first create it in the
1.10 xsa 108: .Pa ./RCS
1.11 jmc 109: subdirectory or, if that fails, in the current directory.
1.1 deraadt 110: Files created this way contain no revision.
1.9 xsa 111: .It Fl k Ns Ar mode
1.44 jmc 112: Specify the keyword substitution mode (see below).
1.1 deraadt 113: .It Fl L
114: Enable strict locking on the RCS files.
1.24 ray 115: .It Fl l Ns Op Ar rev
116: Lock revision
117: .Ar rev
118: on the RCS files.
1.7 niallo 119: .It Fl m Ns Ar rev : Ns Ar msg
1.5 jmc 120: Replace revision
121: .Ar rev Ns 's
122: log message with
123: .Ar msg .
1.19 xsa 124: .It Fl o Ns Ar rev
125: Delete one or more revisions.
126: The specifications of the values or revisions are as follows:
127: .Bl -tag -width Ds
128: .It rev
129: Specific revision.
130: .It rev1:rev2
131: Delete all revisions of a branch between
132: .Ar rev1
133: and
134: .Ar rev2 .
135: .It rev1::rev2
136: Delete all revisions of a branch between
137: .Ar rev1
138: and
139: .Ar rev2
140: without deleting revisions
141: .Ar rev1
142: and
143: .Ar rev2 .
144: .It :rev
145: Delete all revisions of the branch until revision
146: .Ar rev .
147: .It rev:
148: Delete all revisions of the branch from revision
149: .Ar rev
150: until the last revision of the branch.
151: .El
1.13 xsa 152: .It Fl q
153: Be quiet about reporting.
1.16 xsa 154: .It Fl T
1.17 jmc 155: Preserve the modification time of RCS files.
1.56 sobrado 156: .It Fl t Ns Op Ar str
1.14 xsa 157: Change the descriptive text.
1.43 ray 158: The argument
1.14 xsa 159: .Ar str
1.43 ray 160: is interpreted as the name of a file containing
161: the descriptive text or,
162: if prefixed with a
163: .Sq - ,
164: the actual descriptive text itself.
1.14 xsa 165: If no argument is used, the descriptive text is taken from standard input
166: terminated by end-of-file or by a line containing the
167: .Sq \&.
168: character by itself.
1.1 deraadt 169: .It Fl U
170: Disable strict locking on the RCS files.
1.24 ray 171: .It Fl u Ns Op Ar rev
172: Unlock revision
173: .Ar rev
174: on the RCS files.
1.1 deraadt 175: .It Fl V
176: Print the program's version string and exit.
1.15 xsa 177: .It Fl x Ns Ar suffixes
178: Specifies the suffixes for RCS files.
179: Suffixes should be separated by the
180: .Sq /
181: character.
1.25 jmc 182: .El
1.44 jmc 183: .Sh BRANCHES AND REVISIONS
184: Files may be selected by
185: .Em revision
186: or, where no revision is specified,
187: the latest revision of the default
188: .Em branch
189: is used.
190: Revisions are specified either by using the
191: .Fl r
192: option or
193: by appending the revision number to any option that supports it.
194: Branches are selected using the
195: .Fl b
196: option.
197: .Pp
198: A file's revision consists of two elements:
199: release number and level number.
200: For example, revision 2.3 of a file denotes release 2, level 3.
201: Levels may also be subdivided into sublevels:
202: this might happen, for example,
203: if a parallel development is forked from a lower level revision.
204: The primary levels and the sublevels belong to separate branches:
205: the primary levels belong to a branch called HEAD,
206: while sublevels belong to branches specified by revision.
207: .Pp
208: .Nm
209: also supports the notion of
210: .Em state .
211: The state is an arbitrary string of characters used to describe a file
212: (or a specific revision of a file).
213: States can be set or changed using the
214: .Fl s
215: option, for RCS tools which support it.
216: The state of a file/revision can be modified without having to check in
217: a new file/revision.
218: The default state is
219: .Sq Exp
220: (Experimental).
221: Examples of states could be
222: .Sq Dev ,
223: .Sq Reviewed ,
224: or
225: .Sq Stab .
226: .Pp
227: In order to make large groups of RCS files more manageable,
228: RCS tools have the ability to select files by their
229: .Em symbolic name .
230: Thus files can be selected by their symbolic name,
231: rather than numerical revision.
232: .Xr ci 1
233: .Fl N
234: and
235: .Fl n
236: are used to set symbolic names for files.
237: .Pp
238: The following methods of file selection are therefore available:
239: revision number, state, and symbolic name.
240: For options which take as argument
241: .Ar rev
242: or
243: .Ar state ,
244: any of these methods may be used.
245: Some examples:
246: .Bd -literal -offset indent
247: $ co -r"myproject" foo.c
248: $ rcs -m1.3:update foo.c
249: $ ci -s"Exp" bar.c
250: .Ed
1.25 jmc 251: .Sh KEYWORD SUBSTITUTION
1.40 jmc 252: As long as source files are edited inside a working directory,
253: their state can be determined using the
1.27 jmc 254: .Xr cvs 1
1.25 jmc 255: .Ic status
256: or
257: .Ic log
258: commands, but as soon as files get exported from
1.40 jmc 259: a local working copy, it becomes harder to identify which
1.25 jmc 260: revisions they are.
261: .Pp
262: .Nm
263: and
264: .Xr cvs 1
1.40 jmc 265: use a mechanism known as
1.25 jmc 266: .Sq keyword substitution
267: to help identify the files.
268: Embedded strings of the form $keyword$ and $keyword:...$ in a file
1.40 jmc 269: are replaced with strings of the form $keyword: value$ whenever
270: a new revision of the file is obtained.
1.25 jmc 271: The possible keywords are as follows:
1.30 jmc 272: .Bl -tag -width "XrevisionXX" -offset "XXX"
1.25 jmc 273: .It $\&Author$
274: The name of the user who checked in the revision.
275: .It $\&Date$
276: The date and hour (UTC) the revision was checked in.
277: .It $\&Header$
278: Standard header containing the full pathname of the RCS
279: file, the revision number, the date (UTC), the author and the state.
1.58 ! guenther 280: .It $\&Id$ and $\&OpenBSD$
1.25 jmc 281: The same content as $\&Header$ but without the path
282: of the RCS file.
283: .It $\&Log$
284: The log message supplied during commit, preceded by a header
285: containing the RCS filename, the revision number, the
286: author, and the date (UTC).
1.54 jmc 287: .It $\&Mdocdate$
1.52 jmc 288: Produce a date of the form month name, day number, and year,
289: suitable for the
290: .Xr mdoc 7
291: .Dq \&Dd
292: macro.
1.25 jmc 293: .It $\&Name$
294: The tag name used to check out the file.
295: .It $\&RCSfile$
296: The name of the RCS file, but without a path.
297: .It $\&Revision$
298: The revision number assigned to the revision.
299: .It $\&Source$
300: The full pathname of the RCS file.
301: .It $\&State$
302: The state assigned to the revision.
303: .El
304: .Pp
305: Keyword substitution has its disadvantages: sometimes the
306: literal text string $\&Author$ is wanted inside a file without
307: .Nm
1.27 jmc 308: or
309: .Xr cvs 1
1.51 jmc 310: interpreting it as a keyword and expanding it.
1.25 jmc 311: The
1.26 jmc 312: .Fl k Ns Ar o
1.25 jmc 313: option can be used to turn off keyword substitution entirely though.
314: There is unfortunately no way to selectively turn off keyword substitution.
315: .Pp
316: Each file and working directory copy of a file have a stored
317: default substitution mode.
318: Substitution modes on files are set by the
319: .Fl k Ns Ar mode
320: option.
321: .Pp
322: The possible substitution modes are as follows:
323: .Bl -tag -width Ds -offset 3n
1.26 jmc 324: .It Fl k Ns Ar b
1.25 jmc 325: Like
1.26 jmc 326: .Fl k Ns Ar o ,
1.25 jmc 327: but also avoids the conversion of line endings.
328: This option is used to handle binary files.
1.26 jmc 329: .It Fl k Ns Ar k
1.25 jmc 330: Does not substitute the keywords.
331: Useful with the
1.27 jmc 332: .Xr cvs 1
1.25 jmc 333: .Ic diff
1.28 jmc 334: and
335: .Xr rcsdiff 1
336: commands to avoid displaying the differences between keyword substitutions.
1.26 jmc 337: .It Fl k Ns Ar kv
1.25 jmc 338: The default behaviour.
339: Keywords are normally substituted i.e. $\&Revision$ becomes
340: $\&Revision: 1.1 $.
1.26 jmc 341: .It Fl k Ns Ar kvl
1.25 jmc 342: Like
1.26 jmc 343: .Fl k Ns Ar kv ,
1.25 jmc 344: except that the locker's name is displayed along with the version
345: if the given revision is currently locked.
346: This option is normally not useful as
347: .Nm
1.27 jmc 348: and
349: .Xr cvs 1
350: do not use file locking by default.
1.26 jmc 351: .It Fl k Ns Ar o
1.25 jmc 352: No substitutions are done.
353: This option is often used with the
1.27 jmc 354: .Xr cvs 1
1.25 jmc 355: .Ic import
356: command to guarantee that files that already contain external keywords
357: do not get modified.
1.26 jmc 358: .It Fl k Ns Ar v
1.25 jmc 359: Substitute the value of keywords instead of keywords themselves
360: e.g. instead of $\&Revision$, only insert 1.1 and not $\&Revision: 1.1 $.
361: This option must be used with care, as it can only be used once.
362: It is often used with the
1.27 jmc 363: .Xr cvs 1
1.25 jmc 364: .Ic export
365: command to freeze the values before releasing software.
1.1 deraadt 366: .El
367: .Sh ENVIRONMENT
368: .Bl -tag -width RCSINIT
369: .It Ev RCSINIT
370: If set, this variable should contain a list of space-delimited options that
371: are prepended to the argument list.
372: .El
1.55 jmc 373: .Sh EXIT STATUS
374: .Ex -std rcs
1.22 jmc 375: .Sh EXAMPLES
376: One of the most common uses of
377: .Nm
378: is to track changes to a document containing source code.
379: .Pp
380: As an example,
381: we'll look at a user wishing to track source changes to a file
382: .Ar foo.c .
383: .Pp
384: If the
385: .Ar RCS
386: directory does not exist yet, create it as follows and invoke the
387: check-in command:
388: .Bd -literal -offset indent
389: $ mkdir RCS
390: $ ci foo.c
391: .Ed
392: .Pp
393: This command creates an RCS file
394: .Ar foo.c,v
395: in the
396: .Ar RCS
397: directory, stores
398: .Ar foo.c
399: into it as revision 1.1, and deletes
400: .Ar foo.c .
401: .Xr ci 1
402: will prompt for a description of the file to be entered.
403: Whenever a newly created (or updated) file is checked-in,
404: .Xr ci 1
405: will prompt for a log message to be entered which should summarize
406: the changes made to the file.
407: That log message will be added to the RCS file along with the new revision.
408: .Pp
409: The
410: .Xr co 1
411: command can now be used to obtain a copy of the checked-in
412: .Ar foo.c,v
413: file:
414: .Pp
415: .Dl $ co foo.c
416: .Pp
1.36 jmc 417: This command checks the file out in unlocked mode.
1.22 jmc 418: If a user wants to have exclusive access to the file to make changes to it,
419: it needs to be checked out in locked mode using the
420: .Fl l
421: option of the
422: .Xr co 1
423: command.
424: Only one concurrent locked checkout of a revision is permitted.
425: .Pp
426: Once changes have been made to the
427: .Pa foo.c
428: file, and before checking the file in, the
429: .Xr rcsdiff 1
430: command can be used to view changes between the working file
431: and the most recently checked-in revision:
432: .Pp
433: .Dl $ rcsdiff -u foo.c
434: .Pp
435: The
436: .Fl u
437: option produces a unified diff.
438: See
439: .Xr diff 1
440: for more information.
1.1 deraadt 441: .Sh SEE ALSO
442: .Xr ci 1 ,
443: .Xr co 1 ,
1.57 jmc 444: .Xr cvs 1 ,
1.3 jmc 445: .Xr ident 1 ,
1.1 deraadt 446: .Xr rcsclean 1 ,
447: .Xr rcsdiff 1 ,
1.8 xsa 448: .Xr rcsmerge 1 ,
1.6 xsa 449: .Xr rlog 1
1.50 jsg 450: .Rs
451: .%A Tichy, Walter F.
452: .%T "RCS -- a system for version control"
453: .%J "Software--Practice & Experience"
454: .%V 15:7
455: .%D July, 1985
456: .%P pp. 637-654
457: .Re
1.21 jmc 458: .Sh STANDARDS
1.31 jmc 459: OpenRCS is compatible with
460: Walter Tichy's original RCS implementation.
461: .Pp
1.37 jmc 462: The flags
463: .Op Fl Mz
464: have no effect and are provided
1.21 jmc 465: for compatibility only.
1.32 jmc 466: .Sh HISTORY
467: The OpenRCS project is a BSD-licensed rewrite of the original
468: Revision Control System.
469: OpenRCS is written by Jean-Francois Brousseau, Joris Vink,
470: Niall O'Higgins, and Xavier Santolaria.
1.35 jmc 471: .Pp
1.32 jmc 472: The original RCS code was written in large parts by Walter F. Tichy
473: and Paul Eggert.
1.29 jmc 474: .Sh CAVEATS
475: For historical reasons,
476: the RCS tools do not permit whitespace between options and their arguments.