Expand PMF_FN_* macros.
[netbsd-mini2440.git] / usr.bin / rcs / man / rcsintro.1
blobd0ae3295eba323d682f1dcd5dfadc58e7003f81c
1 .TH RCSINTRO 1L "May 11, 1983" "Purdue University"
2 .SH NAME
3 rcsintro - introduction to RCS commands
4 .SH DESCRIPTION
5 The Revision Control System (RCS) manages multiple revisions of text files.
6 RCS automates the storing, retrieval, logging, identification, and merging
7 of revisions. RCS is useful for text that is revised frequently, for example
8 programs, documentation, graphics, papers, form letters, etc.
9 .PP
10 The basic user interface is extremely simple. The novice only needs
11 to learn two commands:
12 .IR ci (1L)
13 and
14 .IR co (1L).
15 \fICi\fR, short for "check in", deposits the contents of a
16 text file into an archival file called an RCS file. An RCS file
17 contains all revisions of a particular text file.
18 \fICo\fR, short for "check out", retrieves revisions from an RCS file.
19 .PP
20 .B "Functions of RCS"
21 .PP
22 .IP \(bu
23 Storage and retrieval of multiple revisions of text. RCS saves all old
24 revisions in a space efficient way.
25 Changes no longer destroy the original, because the
26 previous revisions remain accessible. Revisions can be retrieved according to
27 ranges of revision numbers, symbolic names, dates, authors, and
28 states.
29 .IP \(bu
30 Maintenance of a complete history of changes. RCS logs all changes automatically.
31 Besides the text of each revision, RCS stores the author, the date and time of
32 check-in, and a log message summarizing the change.
33 The logging makes it easy to find out
34 what happened to a module, without having to compare
35 source listings or having to track down colleagues.
36 .IP \(bu
37 Resolution of access conflicts. When two or more programmers wish to
38 modify the same revision, RCS alerts the programmers and prevents one
39 modification from corrupting the other.
40 .IP \(bu
41 Maintenance of a tree of Revisions. RCS can maintain separate lines of development
42 for each module. It stores a tree structure that represents the
43 ancestral relationships among revisions.
44 .IP \(bu
45 Merging of revisions and resolution of conflicts.
46 Two separate lines of development of a module can be coalesced by merging.
47 If the revisions to be merged affect the same sections of code, RCS alerts the
48 user about the overlapping changes.
49 .IP \(bu
50 Release and configuration control. Revisions can be assigned symbolic names
51 and marked as released, stable, experimental, etc.
52 With these facilities, configurations of modules can be
53 described simply and directly.
54 .IP \(bu
55 Automatic identification of each revision with name, revision number,
56 creation time, author, etc.
57 The identification is like a stamp that can be embedded at an appropriate place
58 in the text of a revision.
59 The identification makes it simple to determine which
60 revisions of which modules make up a given configuration.
61 .IP \(bu
62 Minimization of secondary storage. RCS needs little extra space for
63 the revisions (only the differences). If intermediate revisions are
64 deleted, the corresponding deltas are compressed accordingly.
65 .sp
66 .PP
67 .B "Getting Started with RCS"
68 .PP
69 Suppose you have a file f.c that you wish to put under control of RCS. 
70 Invoke the check-in command
71 .PP
72 .ti 1.5i
73 .B "ci  f.c 
74 .PP
75 This command creates the RCS file f.c,v, stores f.c into it as revision 1.1, and
76 deletes f.c.  It also asks you for a description. The description
77 should be a synopsis of the contents of the file. All later check-in
78 commands will ask you for a log entry, which should summarize the
79 changes that you made.
80 .PP
81 Files ending in ,v are called RCS files (`v' stands for `versions'),
82 the others are called working files.
83 To get back the working file f.c in the previous example, use the check-out
84 command
85 .PP
86 .ti 1.5i
87 .B "co  f.c
88 .PP
89 This command extracts the latest revision from f.c,v and writes
90 it into f.c. You can now edit f.c and check it back in by invoking
91 .PP
92 .ti 1.5i
93 .B "ci  f.c
94 .PP
95 \fICi\fR increments the revision number properly. 
96 If \fIci\fR complains with the message
97 .PP
98                 ci error: no lock set by <your login>
99 .PP
100 then your system administrator has decided to create all RCS files
101 with the locking attribute set to `strict'. In this case, you should
102 have locked the revision during the previous check-out. Your last check-out
103 should have been
105 .ti 1.5i
106 .B "co  \-l  f.c
108 Of course, it is too late now to do the check-out with locking, because you
109 probably modified f.c already, and a second check-out would
110 overwrite your modifications. Instead, invoke
112 .ti 1.5i
113 .B "rcs  \-l  f.c
115 This command will lock the latest revision for you, unless somebody
116 else got ahead of you already. In this case, you'll have to negotiate with 
117 that person.
119 Locking assures that you, and only you, can check in the next update, and
120 avoids nasty problems if several people work on the same file.
121 Even if a revision is locked, it can still be checked out for
122 reading, compiling, etc. All that locking
123 prevents is a CHECK-IN by anybody but the locker.
125 If your RCS file is private, i.e., if you are the only person who is going
126 to deposit revisions into it, strict locking is not needed and you
127 can turn it off.
128 If strict locking is turned off,
129 the owner of the RCS file need not have a lock for check-in; all others
130 still do. Turning strict locking off and on is done with the commands
132 .ti 1.5i
133 .BR "rcs  \-U  f.c" "     and     " "rcs  \-L  f.c"
135 If you don't want to clutter your working directory with RCS files, create 
136 a subdirectory called RCS in your working directory, and move all your RCS 
137 files there. RCS commands will look first into that directory to find 
138 needed files. All the commands discussed above will still work, without any 
139 modification. 
140 (Actually, pairs of RCS and working files can be specified in 3 ways:
141 (a) both are given, (b) only the working file is given, (c) only the
142 RCS file is given. Both RCS and working files may have arbitrary path prefixes;
143 RCS commands pair them up intelligently).
145 To avoid the deletion of the working file during check-in (in case you want to
146 continue editing), invoke
148 .ti 1.5i
149 .BR "ci  \-l  f.c" "     or     " "ci  \-u  f.c"
151 These commands check in f.c as usual, but perform an implicit
152 check-out. The first form also locks the checked in revision, the second one
153 doesn't. Thus, these options save you one check-out operation.
154 The first form is useful if locking is strict, the second one if not strict.
155 Both update the identification markers in your working file (see below).
157 You can give \fIci\fR the number you want assigned to a checked in
158 revision. Assume all your revisions were numbered 1.1, 1.2, 1.3, etc.,
159 and you would like to start release 2.
160 The command
162 .ti 1.5i
163 .BR "ci  \-r2  f.c" "     or     " "ci  \-r2.1  f.c"
165 assigns the number 2.1 to the new revision.
166 From then on, \fIci\fR will number the subsequent revisions
167 with 2.2, 2.3, etc. The corresponding \fIco\fR commands
169 .ti 1.5i
170 .BR "co  \-r2  f.c" "     and     " "co  \-r2.1  f.c"
172 retrieve the latest revision numbered 2.x and the revision 2.1,
173 respectively. \fICo\fR without a revision number selects
174 the latest revision on the "trunk", i.e., the highest
175 revision with a number consisting of 2 fields. Numbers with more than 2
176 fields are needed for branches.
177 For example, to start a branch at revision 1.3, invoke
179 .ti 1.5i
180 .B "ci  \-r1.3.1  f.c
182 This command starts a branch numbered 1 at revision 1.3, and assigns
183 the number 1.3.1.1 to the new revision. For more information about
184 branches, see \fIrcsfile\fR(5L).
187 .B "Automatic Identification"
189 RCS can put special strings for identification into your source and object
190 code. To obtain such identification, place the marker
192 .ti 1.5i
193 $\&Header$
195 into your text, for instance inside a comment.
196 RCS will replace this marker with a string of the form
198 .ti 1.5i
199 $\&Header:  filename  revision_number  date  time  author  state $
201 With such a marker on the first page of each module, you can
202 always see with which revision you are working.
203 RCS keeps the markers up to date automatically.
204 To propagate the markers into your object code, simply put
205 them into literal character strings. In C, this is done as follows:
207 .ti 1.5i
208 static char rcsid[] = "$\&Header$";
210 The command \fIident\fR extracts such markers from any file, even object code
211 and dumps.
212 Thus, \fIident\fR lets you find out
213 which revisions of which modules were used in a given program. 
215 You may also find it useful to put the marker $\&Log$
216 into your text, inside a comment. This marker accumulates
217 the log messages that are requested during check-in.
218 Thus, you can maintain the complete history of your file directly inside it.
219 There are several additional identification markers; see \fIco\fR(1L) for
220 details.
221 .SH IDENTIFICATION
222 .de VL
223 \\$2
225 Author: Walter F. Tichy,
226 Purdue University, West Lafayette, IN, 47907.
228 Revision Number:
229 .VL $Revision: 1.1 $
230 ; Release Date:
231 .VL $Date: 1993/03/21 09:58:04 $
234 Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
235 .SH SEE ALSO
236 ci(1L), co(1L), ident(1L), merge(1L), rcs(1L), rcsdiff(1L), rcsmerge(1L), rlog(1L),
237 rcsfile(5L),
239 Walter F. Tichy, "Design, Implementation, and Evaluation of a Revision Control
240 System," in \fIProceedings of the 6th International Conference on Software
241 Engineering\fR, IEEE, Tokyo, Sept. 1982.