No empty .Rs/.Re
[netbsd-mini2440.git] / gnu / usr.bin / rcs / ci / ci.1
blobb3eb9668f113d37f22ec477331b6edebcb330320
1 .\"     $NetBSD: ci.1,v 1.5 2002/02/08 01:26:50 ross Exp $
2 .\"
3 .de Id
4 .ds Rv \\$3
5 .ds Dt \\$4
6 ..
7 .\" Id: ci.1,v 5.17 1995/06/16 06:19:24 eggert Exp
8 .ds i \&\s-1ISO\s0
9 .ds r \&\s-1RCS\s0
10 .ds u \&\s-1UTC\s0
11 .if n .ds - \%--
12 .if t .ds - \(em
13 .TH CI 1 \*(Dt GNU
14 .SH NAME
15 ci \- check in RCS revisions
16 .SH SYNOPSIS
17 .B ci
18 .RI [ options ] " file " .\|.\|.
19 .SH DESCRIPTION
20 .B ci
21 stores new revisions into \*r files.
22 Each pathname matching an \*r suffix
23 is taken to be an \*r file.
24 All others
25 are assumed to be working files containing new revisions.
26 .B ci
27 deposits the contents of each working file
28 into the corresponding \*r file.
29 If only a working file is given,
30 .B ci
31 tries to find the corresponding \*r file in an \*r subdirectory
32 and then in the working file's directory.
33 For more details, see
34 .SM "FILE NAMING"
35 below.
36 .PP
37 For
38 .B ci
39 to work, the caller's login must be on the access list,
40 except if the access list is empty or the caller is the superuser or the
41 owner of the file.
42 To append a new revision to an existing branch, the tip revision on
43 that branch must be locked by the caller.  Otherwise, only a
44 new branch can be created.  This restriction is not enforced
45 for the owner of the file if non-strict locking is used
46 (see
47 .BR rcs (1)).
48 A lock held by someone else can be broken with the
49 .B rcs
50 command.
51 .PP
52 Unless the
53 .B \-f
54 option is given,
55 .B ci
56 checks whether the revision to be deposited differs from the preceding one.
57 If not, instead of creating a new revision
58 .B ci
59 reverts to the preceding one.
60 To revert, ordinary
61 .B ci
62 removes the working file and any lock;
63 .B "ci\ \-l"
64 keeps and
65 .B "ci\ \-u"
66 removes any lock, and then they both generate a new working file much as if
67 .B "co\ \-l"
69 .B "co\ \-u"
70 had been applied to the preceding revision.
71 When reverting, any
72 .B \-n
73 and
74 .B \-s
75 options apply to the preceding revision.
76 .PP
77 For each revision deposited,
78 .B ci
79 prompts for a log message.
80 The log message should summarize the change and must be terminated by
81 end-of-file or by a line containing
82 .BR \&. "\ by"
83 itself.
84 If several files are checked in
85 .B ci
86 asks whether to reuse the
87 previous log message.
88 If the standard input is not a terminal,
89 .B ci
90 suppresses the prompt
91 and uses the same log message for all files.
92 See also
93 .BR \-m .
94 .PP
95 If the \*r file does not exist,
96 .B ci
97 creates it and
98 deposits the contents of the working file as the initial revision
99 (default number:
100 .BR 1.1 ).
101 The access list is initialized to empty.
102 Instead of the log message,
103 .B ci
104 requests descriptive text (see
105 .B \-t
106 below).
108 The number
109 .I rev
110 of the deposited revision can be given by any of the options
111 .BR \-f ,
112 .BR \-i ,
113 .BR \-I ,
114 .BR \-j ,
115 .BR \-k ,
116 .BR \-l ,
117 .BR \-M ,
118 .BR \-q ,
119 .BR \-r ,
121 .BR \-u .
122 .I rev
123 can be symbolic, numeric, or mixed.
124 Symbolic names in
125 .I rev
126 must already be defined;
127 see the
128 .B \-n
130 .B \-N
131 options for assigning names during checkin.
133 .I rev
135 .BR $ ,
136 .B ci
137 determines the revision number from keyword values in the working file.
140 .I rev
141 begins with a period,
142 then the default branch (normally the trunk) is prepended to it.
144 .I rev
145 is a branch number followed by a period,
146 then the latest revision on that branch is used.
149 .I rev
150 is a revision number, it must be higher than the latest
151 one on the branch to which
152 .I rev
153 belongs, or must start a new branch.
156 .I rev
157 is a branch rather than a revision number,
158 the new revision is appended to that branch.  The level number is obtained
159 by incrementing the tip revision number of that branch.
161 .I rev
162 indicates a non-existing branch,
163 that branch is created with the initial revision numbered
164 .IB rev .1\f1.\fP
166 .ne 8
169 .I rev
170 is omitted,
171 .B ci
172 tries to derive the new revision number from
173 the caller's last lock.  If the caller has locked the tip revision of a branch,
174 the new revision is appended to that branch.
175 The new revision number is obtained
176 by incrementing the tip revision number.
177 If the caller locked a non-tip revision, a new branch is started at
178 that revision by incrementing the highest branch number at that revision.
179 The default initial branch and level numbers are
180 .BR 1 .
183 .I rev
184 is omitted and the caller has no lock, but owns
185 the file and locking
186 is not set to
187 .IR strict ,
188 then the revision is appended to the
189 default branch (normally the trunk; see the
190 .B \-b
191 option of
192 .BR rcs (1)).
194 Exception: On the trunk, revisions can be appended to the end, but
195 not inserted.
196 .SH OPTIONS
198 .BI \-r rev
199 Check in revision
200 .IR rev .
202 .BR \-r
203 The bare
204 .B \-r
205 option (without any revision) has an unusual meaning in
206 .BR ci .
207 With other \*r commands, a bare
208 .B \-r
209 option specifies the most recent revision on the default branch,
210 but with
211 .BR ci ,
212 a bare
213 .B \-r
214 option reestablishes the default behavior of releasing a lock and
215 removing the working file, and is used to override any default
216 .B \-l
218 .B \-u
219 options established by shell aliases or scripts.
221 .BR \-l [\f2rev\fP]
222 works like
223 .BR \-r ,
224 except it performs an additional
225 .B "co\ \-l"
226 for the
227 deposited revision.  Thus, the deposited revision is immediately
228 checked out again and locked.
229 This is useful for saving a revision although one wants to continue
230 editing it after the checkin.
232 .BR \-u [\f2rev\fP]
233 works like
234 .BR \-l ,
235 except that the deposited revision is not locked.
236 This lets one read the working file
237 immediately after checkin.
241 .BR \-l ,
242 bare
243 .BR \-r ,
245 .B \-u
246 options are mutually exclusive and silently override each other.
247 For example,
248 .B "ci\ \-u\ \-r"
249 is equivalent to
250 .B "ci\ \-r"
251 because bare
252 .B \-r
253 overrides
254 .BR \-u .
257 .BR \-f [\f2rev\fP]
258 forces a deposit; the new revision is deposited even it is not different
259 from the preceding one.
261 .BR \-k [\f2rev\fP]
262 searches the working file for keyword values to determine its revision number,
263 creation date, state, and author (see
264 .BR co (1)),
265 and assigns these
266 values to the deposited revision, rather than computing them locally.
267 It also generates a default login message noting the login of the caller
268 and the actual checkin date.
269 This option is useful for software distribution.  A revision that is sent to
270 several sites should be checked in with the
271 .B \-k
272 option at these sites to
273 preserve the original number, date, author, and state.
274 The extracted keyword values and the default log message can be overridden
275 with the options
276 .BR \-d ,
277 .BR \-m ,
278 .BR \-s ,
279 .BR \-w ,
280 and any option that carries a revision number.
282 .BR \-q [\f2rev\fP]
283 quiet mode; diagnostic output is not printed.
284 A revision that is not different from the preceding one is not deposited,
285 unless
286 .B \-f
287 is given.
289 .BR \-i [\f2rev\fP]
290 initial checkin; report an error if the \*r file already exists.
291 This avoids race conditions in certain applications.
293 .BR \-j [\f2rev\fP]
294 just checkin and do not initialize;
295 report an error if the \*r file does not already exist.
297 .BR \-I [\f2rev\fP]
298 interactive mode;
299 the user is prompted and questioned
300 even if the standard input is not a terminal.
302 .BR \-d "[\f2date\fP]"
303 uses
304 .I date
305 for the checkin date and time.
307 .I date
308 is specified in free format as explained in
309 .BR co (1).
310 This is useful for lying about the checkin date, and for
311 .B \-k
312 if no date is available.
314 .I date
315 is empty, the working file's time of last modification is used.
317 .BR \-M [\f2rev\fP]
318 Set the modification time on any new working file
319 to be the date of the retrieved revision.
320 For example,
321 .BI "ci\ \-d\ \-M\ \-u" "\ f"
322 does not alter
323 .IR f 's
324 modification time, even if
325 .IR f 's
326 contents change due to keyword substitution.
327 Use this option with care; it can confuse
328 .BR make (1).
330 .BI \-m "msg"
331 uses the string
332 .I msg
333 as the log message for all revisions checked in.
334 By convention, log messages that start with
335 .B #
336 are comments and are ignored by programs like GNU Emacs's
337 .B vc
338 package.
339 Also, log messages that start with
340 .BI { clumpname }
341 (followed by white space) are meant to be clumped together if possible,
342 even if they are associated with different files; the
343 .BI { clumpname }
344 label is used only for clumping,
345 and is not considered to be part of the log message itself.
347 .BI \-n "name"
348 assigns the symbolic name
349 .I name
350 to the number of the checked-in revision.
351 .B ci
352 prints an error message if
353 .I name
354 is already assigned to another
355 number.
357 .BI \-N "name"
358 same as
359 .BR \-n ,
360 except that it overrides a previous assignment of
361 .IR name .
363 .BI \-s "state"
364 sets the state of the checked-in revision to the identifier
365 .IR state .
366 The default state is
367 .BR Exp .
369 .BI \-t file
370 writes descriptive text from the contents of the named
371 .I file
372 into the \*r file,
373 deleting the existing text.
375 .I file
376 cannot begin with
377 .BR \- .
379 .BI \-t\- string
380 Write descriptive text from the
381 .I string
382 into the \*r file, deleting the existing text.
386 .B \-t
387 option, in both its forms, has effect only during an initial checkin;
388 it is silently ignored otherwise.
390 During the initial checkin, if
391 .B \-t
392 is not given,
393 .B ci
394 obtains the text from standard input,
395 terminated by end-of-file or by a line containing
396 .BR \&. "\ by"
397 itself.
398 The user is prompted for the text if interaction is possible; see
399 .BR \-I .
401 For backward compatibility with older versions of \*r, a bare
402 .B \-t
403 option is ignored.
406 .B \-T
407 Set the \*r file's modification time to the new revision's time
408 if the former precedes the latter and there is a new revision;
409 preserve the \*r file's modification time otherwise.
410 If you have locked a revision,
411 .B ci
412 usually updates the \*r file's modification time to the current time,
413 because the lock is stored in the \*r file
414 and removing the lock requires changing the \*r file.
415 This can create an \*r file newer than the working file in one of two ways:
416 first,
417 .B "ci\ \-M"
418 can create a working file with a date before the current time;
419 second, when reverting to the previous revision
420 the \*r file can change while the working file remains unchanged.
421 These two cases can cause excessive recompilation caused by a
422 .BR make (1)
423 dependency of the working file on the \*r file.
425 .B \-T
426 option inhibits this recompilation by lying about the \*r file's date.
427 Use this option with care; it can suppress recompilation even when
428 a checkin of one working file should affect
429 another working file associated with the same \*r file.
430 For example, suppose the \*r file's time is 01:00,
431 the (changed) working file's time is 02:00,
432 some other copy of the working file has a time of 03:00,
433 and the current time is 04:00.
434 Then
435 .B "ci\ \-d\ \-T"
436 sets the \*r file's time to 02:00 instead of the usual 04:00;
437 this causes
438 .BR make (1)
439 to think (incorrectly) that the other copy is newer than the \*r file.
441 .BI \-w "login"
442 uses
443 .I login
444 for the author field of the deposited revision.
445 Useful for lying about the author, and for
446 .B \-k
447 if no author is available.
449 .BI \-V
450 Print \*r's version number.
452 .BI \-V n
453 Emulate \*r version
454 .IR n .
456 .BR co (1)
457 for details.
459 .BI \-x "suffixes"
460 specifies the suffixes for \*r files.
461 A nonempty suffix matches any pathname ending in the suffix.
462 An empty suffix matches any pathname of the form
463 .BI RCS/ path
465 .IB path1 /RCS/ path2.
467 .B \-x
468 option can specify a list of suffixes
469 separated by
470 .BR / .
471 For example,
472 .B \-x,v/
473 specifies two suffixes:
474 .B ,v
475 and the empty suffix.
476 If two or more suffixes are specified,
477 they are tried in order when looking for an \*r file;
478 the first one that works is used for that file.
479 If no \*r file is found but an \*r file can be created,
480 the suffixes are tried in order
481 to determine the new \*r file's name.
482 The default for
483 .IR suffixes
484 is installation-dependent; normally it is
485 .B ,v/
486 for hosts like UNIX that permit commas in filenames,
487 and is empty (i.e. just the empty suffix) for other hosts.
489 .BI \-z zone
490 specifies the date output format in keyword substitution,
491 and specifies the default time zone for
492 .I date
493 in the
494 .BI \-d date
495 option.
497 .I zone
498 should be empty, a numeric \*u offset, or the special string
499 .B LT
500 for local time.
501 The default is an empty
502 .IR zone ,
503 which uses the traditional \*r format of \*u without any time zone indication
504 and with slashes separating the parts of the date;
505 otherwise, times are output in \*i 8601 format with time zone indication.
506 For example, if local time is January 11, 1990, 8pm Pacific Standard Time,
507 eight hours west of \*u,
508 then the time is output as follows:
513 .ta \w'\f3\-z+05:30\fP  'u +\w'\f31990-01-11 09:30:00+05:30\fP  'u
514 .ne 4
515 \f2option\fP    \f2time output\fP
516 \f3\-z\fP       \f31990/01/12 04:00:00\fP       \f2(default)\fP
517 \f3\-zLT\fP     \f31990-01-11 20:00:00\-08\fP
518 \f3\-z+05:30\fP \f31990-01-12 09:30:00+05:30\fP
519 .ta 4n +4n +4n +4n
524 .B \-z
525 option does not affect dates stored in \*r files,
526 which are always \*u.
527 .SH "FILE NAMING"
528 Pairs of \*r files and working files can be specified in three ways
529 (see also the
530 example section).
532 1) Both the \*r file and the working file are given.  The \*r pathname is of
533 the form
534 .IB path1 / workfileX
535 and the working pathname is of the form
536 .IB path2 / workfile
537 where
538 .IB path1 /
540 .IB path2 /
541 are (possibly different or empty) paths,
542 .I workfile
543 is a filename, and
544 .I X
545 is an \*r suffix.
547 .I X
548 is empty,
549 .IB path1 /
550 must start with
551 .B RCS/
552 or must contain
553 .BR /RCS/ .
555 2) Only the \*r file is given.  Then the working file is created in the current
556 directory and its name is derived from the name of the \*r file
557 by removing
558 .IB path1 /
559 and the suffix
560 .IR X .
562 3) Only the working file is given.
563 Then
564 .B ci
565 considers each \*r suffix
566 .I X
567 in turn, looking for an \*r file of the form
568 .IB path2 /RCS/ workfileX
569 or (if the former is not found and
570 .I X
571 is nonempty)
572 .IB path2 / workfileX.
574 If the \*r file is specified without a path in 1) and 2),
575 .B ci
576 looks for the \*r file first in the directory
577 .B ./RCS
578 and then in the current
579 directory.
581 .B ci
582 reports an error if an attempt to open an \*r file fails for an unusual reason,
583 even if the \*r file's pathname is just one of several possibilities.
584 For example, to suppress use of \*r commands in a directory
585 .IR d ,
586 create a regular file named
587 .IB d /RCS
588 so that casual attempts to use \*r commands in
589 .I d
590 fail because
591 .IB d /RCS
592 is not a directory.
593 .SH EXAMPLES
594 Suppose
595 .B ,v
596 is an \*r suffix and the current directory contains a subdirectory
597 .B RCS
598 with an \*r file
599 .BR io.c,v .
600 Then each of the following commands check in a copy of
601 .B io.c
602 into
603 .B RCS/io.c,v
604 as the latest revision, removing
605 .BR io.c .
609 .ft 3
610 ci  io.c;    ci  RCS/io.c,v;   ci  io.c,v;
611 ci  io.c  RCS/io.c,v;    ci  io.c  io.c,v;
612 ci  RCS/io.c,v  io.c;    ci  io.c,v  io.c;
617 Suppose instead that the empty suffix
618 is an \*r suffix and the current directory contains a subdirectory
619 .B RCS
620 with an \*r file
621 .BR io.c .
622 The each of the following commands checks in a new revision.
626 .ft 3
627 ci  io.c;    ci  RCS/io.c;
628 ci  io.c  RCS/io.c;
629 ci  RCS/io.c  io.c;
633 .SH "FILE MODES"
634 An \*r file created by
635 .B ci
636 inherits the read and execute permissions
637 from the working file.  If the \*r file exists already,
638 .B ci
639 preserves its read and execute permissions.
640 .B ci
641 always turns off all write permissions of \*r files.
642 .SH FILES
643 Temporary files are created in the directory containing
644 the working file, and also in the temporary directory (see
645 .B \s-1TMPDIR\s0
646 under
647 .BR \s-1ENVIRONMENT\s0 ).
648 A semaphore file or files are created in the directory containing the \*r file.
649 With a nonempty suffix, the semaphore names begin with
650 the first character of the suffix; therefore, do not specify an suffix
651 whose first character could be that of a working filename.
652 With an empty suffix, the semaphore names end with
653 .B _
654 so working filenames should not end in
655 .BR _ .
657 .B ci
658 never changes an \*r or working file.
659 Normally,
660 .B ci
661 unlinks the file and creates a new one;
662 but instead of breaking a chain of one or more symbolic links to an \*r file,
663 it unlinks the destination file instead.
664 Therefore,
665 .B ci
666 breaks any hard or symbolic links to any working file it changes;
667 and hard links to \*r files are ineffective,
668 but symbolic links to \*r files are preserved.
670 The effective user must be able to
671 search and write the directory containing the \*r file.
672 Normally, the real user must be able to
673 read the \*r and working files
674 and to search and write the directory containing the working file;
675 however, some older hosts
676 cannot easily switch between real and effective users,
677 so on these hosts the effective user is used for all accesses.
678 The effective user is the same as the real user
679 unless your copies of
680 .B ci
682 .B co
683 have setuid privileges.
684 As described in the next section,
685 these privileges yield extra security if
686 the effective user owns all \*r files and directories,
687 and if only the effective user can write \*r directories.
689 Users can control access to \*r files by setting the permissions
690 of the directory containing the files; only users with write access
691 to the directory can use \*r commands to change its \*r files.
692 For example, in hosts that allow a user to belong to several groups,
693 one can make a group's \*r directories writable to that group only.
694 This approach suffices for informal projects,
695 but it means that any group member can arbitrarily change the group's \*r files,
696 and can even remove them entirely.
697 Hence more formal projects sometimes distinguish between an \*r administrator,
698 who can change the \*r files at will, and other project members,
699 who can check in new revisions but cannot otherwise change the \*r files.
700 .SH "SETUID USE"
701 To prevent anybody but their \*r administrator from deleting revisions,
702 a set of users can employ setuid privileges as follows.
703 .nr n \w'\(bu'+2n-1/1n
704 .ds n \nn
705 .if \n(.g .if r an-tag-sep .ds n \w'\(bu'u+\n[an-tag-sep]u
706 .IP \(bu \*n
707 Check that the host supports \*r setuid use.
708 Consult a trustworthy expert if there are any doubts.
709 It is best if the
710 .B seteuid
711 system call works as described in POSIX 1003.1a Draft 5,
712 because \*r can switch back and forth easily
713 between real and effective users, even if the real user is
714 .BR root .
715 If not, the second best is if the
716 .B setuid
717 system call supports saved setuid
718 (the {\s-1_POSIX_SAVED_IDS\s0} behavior of POSIX 1003.1-1990);
719 this fails only if the real or effective user is
720 .BR root .
721 If \*r detects any failure in setuid, it quits immediately.
722 .IP \(bu \nn
723 Choose a user
724 .I A
725 to serve as \*r administrator for the set of users.
726 Only
727 .I A
728 can invoke the
729 .B rcs
730 command on the users' \*r files.
731 .I A
732 should not be
733 .B root
734 or any other user with special powers.
735 Mutually suspicious sets of users should use different administrators.
736 .IP \(bu \nn
737 Choose a pathname
738 .I B
739 to be a directory of files to be executed by the users.
740 .IP \(bu \nn
741 Have
742 .I A
743 set up
744 .I B
745 to contain copies of
746 .B ci
748 .B co
749 that are setuid to
750 .I A
751 by copying the commands from their standard installation directory
752 .I D
753 as follows:
757 .ne 3
758 \f3mkdir\fP  \f2B\fP
759 \f3cp\fP  \f2D\fP\^\f3/c[io]\fP  \f2B\fP
760 \f3chmod  go\-w,u+s\fP  \f2B\fP\f3/c[io]\fP
763 .IP \(bu \nn
764 Have each user prepend
765 .I B
766 to their path as follows:
770 .ne 2
771 \f3PATH=\fP\f2B\fP\f3:$PATH;  export  PATH\fP  # ordinary shell
772 \f3set  path=(\fP\f2B\fP  \f3$path)\fP  # C shell
775 .IP \(bu \nn
776 Have
777 .I A
778 create each \*r directory
779 .I R
780 with write access only to
781 .I A
782 as follows:
786 .ne 2
787 \f3mkdir\fP  \f2R\fP
788 \f3chmod  go\-w\fP  \f2R\fP
791 .IP \(bu \nn
792 If you want to let only certain users read the \*r files,
793 put the users into a group
794 .IR G ,
795 and have
796 .I A
797 further protect the \*r directory as follows:
801 .ne 2
802 \f3chgrp\fP  \f2G  R\fP
803 \f3chmod  g\-w,o\-rwx\fP  \f2R\fP
806 .IP \(bu \nn
807 Have
808 .I A
809 copy old \*r files (if any) into
810 .IR R ,
811 to ensure that
812 .I A
813 owns them.
814 .IP \(bu \nn
815 An \*r file's access list limits who can check in and lock revisions.
816 The default access list is empty,
817 which grants checkin access to anyone who can read the \*r file.
818 If you want limit checkin access,
819 have
820 .I A
821 invoke
822 .B "rcs\ \-a"
823 on the file; see
824 .BR rcs (1).
825 In particular,
826 .BI "rcs\ \-e\ \-a" A
827 limits access to just
828 .IR A .
829 .IP \(bu \nn
830 Have
831 .I A
832 initialize any new \*r files with
833 .B "rcs\ \-i"
834 before initial checkin, adding the
835 .B \-a
836 option if you want to limit checkin access.
837 .IP \(bu \nn
838 Give setuid privileges only to
839 .BR ci ,
840 .BR co ,
842 .BR rcsclean ;
843 do not give them to
844 .B rcs
845 or to any other command.
846 .IP \(bu \nn
847 Do not use other setuid commands to invoke \*r commands;
848 setuid is trickier than you think!
849 .SH ENVIRONMENT
851 .B \s-1RCSINIT\s0
852 options prepended to the argument list, separated by spaces.
853 A backslash escapes spaces within an option.
855 .B \s-1RCSINIT\s0
856 options are prepended to the argument lists of most \*r commands.
857 Useful
858 .B \s-1RCSINIT\s0
859 options include
860 .BR \-q ,
861 .BR \-V ,
862 .BR \-x ,
864 .BR \-z .
866 .B \s-1TMPDIR\s0
867 Name of the temporary directory.
868 If not set, the environment variables
869 .B \s-1TMP\s0
871 .B \s-1TEMP\s0
872 are inspected instead and the first value found is taken;
873 if none of them are set,
874 a host-dependent default is used, typically
875 .BR /tmp .
876 .SH DIAGNOSTICS
877 For each revision,
878 .B ci
879 prints the \*r file, the working file, and the number
880 of both the deposited and the preceding revision.
881 The exit status is zero if and only if all operations were successful.
882 .SH IDENTIFICATION
883 Author: Walter F. Tichy.
885 Manual Page Revision: \*(Rv; Release Date: \*(Dt.
887 Copyright \(co 1982, 1988, 1989 Walter F. Tichy.
889 Copyright \(co 1990, 1991, 1992, 1993, 1994, 1995 Paul Eggert.
890 .SH "SEE ALSO"
891 co(1),
892 emacs(1),
893 ident(1), make(1), rcs(1), rcsclean(1), rcsdiff(1),
894 rcsintro(1), rcsmerge(1), rlog(1), setuid(2), rcsfile(5)
896 Walter F. Tichy,
897 \*r\*-A System for Version Control,
898 .I "Software\*-Practice \*[Am] Experience"
899 .BR 15 ,
900 7 (July 1985), 637-654.