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