ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/documentation/papers/cvs-2.txt
Revision: 1.4
Committed: Thu Nov 16 20:18:17 2000 UTC (23 years, 5 months ago) by tdb
Content type: text/plain
Branch: MAIN
Changes since 1.3: +19 -13 lines
Log Message:
A few more updates, after Paul tested my instructions out :-)

File Contents

# User Rev Content
1 tdb 1.1 Using CVS (part 2)
2     ==================
3    
4 tdb 1.2 Contents
5     --------
6     - Errata to "Using CVS (part 1)"
7     - Setting up CVS on a Public PC (with WinCVS/SSH)
8 tdb 1.3 - Setting up CVS off campus/SSB (with WinCVS/SSH)
9 tdb 1.2
10     - How CVS handles binary files
11     - Tagging the Repository
12     - Branching in CVS
13     - Keyword Expansion
14     - Online CVS Resources
15    
16     - See "Using CVS (part 1)" for basic information on setting
17     up and using CVS at UKC.
18    
19     tdb1, 29/10/00.
20 tdb 1.1
21     Errata to "Using CVS (part 1)"
22     ------------------------------
23     Setting up CVS on a Public PC (with WinCVS/SSH)
24     -----------------------------------------------
25     Assuming you already have WinCVS working we just need to
26     make a few modifications to get the same thing working with
27     SSH. This will only work on a public PC, although with some
28     careful copying of files you might be able to get it to work
29     on a normal SSB machine.
30    
31     Firstly we need to get SSH working. As it is SSH does work,
32     but it will keep prompting for a password, which is a pain
33     when it's hidden in a cmd window somewhere. We'll start by
34     tweaking the SSH setup, and then we'll setup a key pair to
35     remove the need for a password.
36    
37     [adapted from instructions given by jc]
38    
39     First thing is to setup a few environment variables. This is
40     done in the System part of Control Panel. Under the User
41     Variables section add the following;
42    
43     HOME =
44     z:\username
45     CVS_RSH =
46     ssh
47     CVSROOT =
48     :ext:user@raptor.ukc.ac.uk:/usr/local/proj/co600_10/cvs
49    
50     Next we need to go about setting up the key pair. This is
51     done by two batch files called getkey.bat and copy-key.bat
52     which are already on the public PC's. Unfortunately you need
53     to modify getkey.bat to make it work with raptor, so copy it
54     from the C: drive (c:\winnt\system32 I believe) to your
55     desktop (or anywhere else). Edit it so that the third line
56     reads;
57    
58     set HOST=raptor
59    
60     Then run it. You'll be prompted for your raptor password
61     three times, and then the key is setup. Next you need to run
62     copy-key.bat. Just go to "Start -> Run -> copy-key raptor"
63     to make it do it's stuff.
64    
65     Now, we're pretty much all set. You should be able to type
66 tdb 1.4 "ssh -l <user> raptor" into a command window and log
67     straight in without the need for a password. If not,
68     something has gone wrong !
69 tdb 1.1
70     Finally, a quick alteration to WinCVS and we're done. In the
71     preferences set the CVS Root to be;
72    
73     :ext:user@raptor.ukc.ac.uk:/usr/local/proj/co600_10/cvs
74    
75     Then set the Authentication type to "SSH server". Assuming
76     you've already done the rest of the setup from the last
77     document you should be able to do a checkout as normal, but
78     this time without the need for a mapped drive - which is a
79     much neater way of doing things.
80 tdb 1.3
81     Setting up CVS off campus/SSB (with WinCVS/SSH)
82     -----------------------------------------------
83     To do this you'll need two packages. Firstly, and most
84     obviously WinCVS. The latest version of WinCVS (1.1b16) can
85     be downloaded from the "WinCvs 1.1 *BETA* / Client + Local /
86     Binaries" on the following page;
87    
88     http://www.wincvs.org/download.html
89    
90     Secondly you'll require SSH. I'm not sure where this package
91     orginated, but there is a current version on raptor at;
92    
93     /usr/local/proj/co600_10/sshwin32/ssh-1.2.14-win32bin.zip
94    
95     Armed with those two files you're ready to go. To get
96     started we need to get ssh installed, and a key setup with
97     raptor.
98    
99     Installing ssh is easy. Simply extract the contents of the
100     zip file in to your windows\system32 directory (on
101     winnt/win2k - windows\system on win9x). This will put the
102     DLL's in place and the binary ssh files.
103    
104     Next, setting up a key. This requires a few straightforward
105     steps.
106    
107 tdb 1.4 - setup a directory (on your machine) to be considered your
108     "home folder" and then ensure that the environment
109     variable HOME is pointed at this directory. Then make a
110     directory called .ssh within this.
111 tdb 1.3
112     - telnet into raptor and run this command;
113 tdb 1.4 ssh-keygen -f ssh-newkey -q -P '' -C '<user> on NT'
114 tdb 1.3
115     make sure you change <user> for your userid, and that you
116     notice the difference between the single quote ' and the
117     double quotes ".
118    
119     - using ftp (or by any other means) copy the files named
120     ssh-newkey and ssh-newkey.pub to the .ssh folder you made
121     on your machine. Now rename them to identity and
122     identity.pub respectively.
123    
124     - Finally we need to get the contents of the identity.pub
125     file above into the file ~/.ssh/authorized_keys on
126     raptor. The easiest way to do this is to type the
127     following;
128     cat ssh-newkey.pub >> .ssh/authorized_keys
129    
130     This assumes you didn't delete the ssh-newkey files, and
131     that you are in your home folder. Finally, you can delete
132     the ssh-newkey and ssh-newkey.pub files from raptor.
133    
134     Now, to test this setup you should try the following from a
135 tdb 1.4 command prompt (on your machine, not raptor);
136 tdb 1.3
137     ssh -l <userid> raptor.ukc.ac.uk
138    
139     If everything has completed successfully you should now be
140     looking at a raptor prompt. If not... then work out why not!
141    
142     Right, now on to WinCVS. This is now a doddle. In the
143     preferences set the CVSROOT to;
144    
145     :ext:<user>@raptor.ukc.ac.uk:/usr/local/proj/co600_10/cvs
146    
147     Set Authentication to SSH server, and set the RSA identity
148 tdb 1.4 to your identity file (not the .pub one). On the ports tab
149     check the "alternate rsh name" box at the bottom, and make
150     sure "ssh" is in the text box. You might also like to
151     uncheck "checkout read-only" and "prune empty directories"
152     on the globals tab.
153    
154     Finally set the browser directory to a suitable location and
155     try checking something out. If all has worked an SSH window
156     should pop up at the bottom of the screen and the files
157     should appear.
158 tdb 1.3
159     As a final note, turning TCP/IP compression on may make it
160     quicker over a modem.
161 tdb 1.1
162     How CVS handles binary files
163     ----------------------------
164     Basically CVS can't do version management of binary files,
165     and quite obviously this is because it's not possible to
166     make version comparisons between two revisions in a logical
167     way. But, CVS will let you store binary files and will let
168     you add new versions. However, it will not store "changes"
169     between them, or allow you to view diffs between them.
170    
171     IMPORTANT: You must make sure you tell CVS that a file is
172     binary, otherwise it will not store it correctly
173     and the file will be corrupted.
174    
175     In WinCVS it's really easy to add a binary file, simply
176     select "Add selection binary" instead of the usual "Add
177     selection". WinCVS will display a "binary" icon instead, and
178     add "-kb" into the Option column. This -kb tells the CVS
179     command that the file is binary.
180    
181     This leads nicely into how to do it from the command line.
182     You simply type the following in place of the usual "cvs
183     add" command.
184    
185     cvs add -kb <filename>
186    
187     Again, the -kb is present. Now, a quick explanation of what
188     this "-kb" means. Basically it is telling CVS not to do
189     keyword expansion (turning $Revision$ into $Revision: 1.3 $)
190     and tell is not to attempt to convert between unix/windows
191     text formats.
192    
193     Tagging the Repository
194     ----------------------
195     Tagging the repository is a way of "marking" all the files
196     at a particular point in time. For example, when "release 1"
197     is finished you might want to mark this in the history of
198     all the files, so you can easily come back to it in the
199     future. As every file the makes up "release 1" may be on a
200     different individual revision, it would be tedious to do
201     without the aid of tagging.
202    
203     This is the best example I've seen that clearly shows how a
204     tag is implemented. Imagine the dotted line signfies the
205     point at which you declared the files were "release 1". As
206     you can see, work as continued on the files, but you could
207     easily pull out each file at "release 1".
208    
209     File A File B File C File D File E
210     ------ ------ ------ ------ ------
211     1.1 1.1 1.1 1.1 1.1
212     ---1.2-. 1.2 1.2 1.2 1.2
213     1.3 | 1.3 1.3 1.3 1.3
214     \ 1.4 .-1.4-. 1.4 1.4
215     \ 1.5 / 1.5 \ 1.5 1.5
216     \ 1.6 / 1.6 | 1.6 1.6
217     \ 1.7 / | 1.7 1.7
218     \ 1.8 / | 1.8 .-1.8----->
219     \ 1.9 / | 1.9 / 1.9
220     `1.10' | 1.10 / 1.10
221     1.11 | 1.11 |
222     | 1.12 |
223     | 1.13 |
224     \ 1.14 |
225     \ 1.15 /
226     \ 1.16 /
227     `-1.17-'
228    
229     In fact, if you imagine pulling this line straight, you'd
230     get the following effect which even more clearly shows where
231     "release 1" is.
232    
233     File A File B File C File D File E
234     ------ ------ ------ ------ ------
235     1.1
236     1.2
237     1.3
238     1.4
239     1.5
240     1.6
241     1.7
242     1.1 1.8
243     1.2 1.9
244     1.3 1.10 1.1
245     1.4 1.11 1.2
246     1.5 1.12 1.3
247     1.6 1.13 1.4
248     1.7 1.1 1.14 1.5
249     1.8 1.2 1.15 1.6
250     1.1 1.9 1.3 1.16 1.7
251     ---1.2---------1.10--------1.4---------1.17--------1.8----->
252     1.3 1.11 1.5 1.17 1.9
253     1.6 1.17 1.10
254    
255     Tagging is actually remarkably easy to do. All you do is
256     issue a single command to tag the files at the current point
257     in time. You should make sure all development stops whilst
258     you do it, otherwise a bit of new code could sneak in.
259     Here's how to do it;
260    
261     cvs tag public-release_1
262    
263     This would mark the files with the tag "public-release_1".
264     You can then continue with developement, knowing that all
265     those files can easily be retrieved. It's again suprisingly
266     easy to do. Instead of typing "cvs checkout source" you
267     would type;
268    
269     cvs checkout -r public-release_1 source
270    
271     Which would checkout the source module at the point which
272     you tagged. Alternatively the following would update (or
273     downdate ?) your working copy to the tagged point;
274    
275     cvs update -r public-release_1
276    
277     Finally, a quick mention of why this would be useful.
278     Imagine the development team was split into two groups, one
279     working on coding, another working on testing. When the
280     coding group have finished "release 1" they can tag it and
281     carry on developing for "release 2". At the same time, the
282     testing team can checkout "release 1" and test it, reporting
283     bugs back to the coding team for fixing in "release 2". It
284     could also mean the a customer could still get hold of the
285     first release whilst you're busy coding for the second.
286    
287     Branching in CVS
288     ----------------
289     So far I've only talked about a single CVS branch, the
290     trunk. There is only ever one "current" revision of each
291     file, and everyone is working on the same files. However, it
292     is possible to branch this out into more than one copy of
293     the same files. A good example of why this is useful is
294     continuing the idea at the end of the last section.
295    
296     Imagine the coding team are now busy working on "release 2"
297     and the testing team come up with a major flaw in
298     the older "release 1". Customers have already got this
299     version installed, so it needs fixing straight away. The
300     trick is to make a branch at the point where "release 1" was
301     tagged, and then fix the bugs on this branch. This branch
302     need not carry on, it could just have the few bugs fixed,
303     whilst the main branch (the trunk) has development of
304     "release 2" carrying on. This diagram shows this;
305    
306     |
307     | -- tag "release_1"
308     |\
309     | \
310     | |
311     | |
312     | - -- tag "release_1-fixed"
313     |
314     |
315     | -- tag "release_2"
316    
317     As you can see the customer could then get a copy of
318     "release_1-fixed" and not worry about the unstable code in
319     "release_2".
320    
321     Branches can get much more complicated than this, but it's
322     beyond the scope of our requirements. Further info can be
323     found on the web.
324    
325     Keyword Expansion
326     -----------------
327     CVS allows you to put certain keywords into a file which CVS
328     will expand when you check files in and out of the
329     repository. There are quite a few, and they're all pretty
330     useful in places. Here's a quick summary;
331    
332     $Author$
333     The author of the latest change.
334     eg. $Author: tdb1 $
335    
336     $Date$
337     The date/time of the latest change.
338     eg. $Date: 2000/10/30 13:10:04 $
339    
340     $Header$
341     Various useful bits of information.
342     eg. $Header: /usr/local/proj/co600_10/cvs/file.txt,v \
343     1.1 2000/10/30 13:00:00 tdb1 Exp tdb1 $
344    
345     $Id$
346     Simliar to $Header$, but without that wieldy path.
347     eg.
348     $Id: cvs-2.txt,v 1.3 2000/10/30 13:10:04 tdb1 Exp $
349    
350     $Log$
351     Puts the latest log message in.
352    
353     $Locker$
354     Name of the person who has a lock (usually no-one).
355     eg. $Locker: tdb1 $
356    
357     $Name$
358     Name of the tag.
359     eg. $Name: release_1 $
360    
361     $RCSfile$
362     Name of the RCS file.
363     eg. $RCSfile: cvs-2.txt,v $
364    
365     $Revision$
366     Revision number of the file.
367     eg. $Revision: 1.3 $
368    
369     $Source$
370     Full path to the file in the repository.
371     eg. $Source: /usr/local/proj/co600_10/cvs/file.txt,v $
372    
373     $State$
374     State of the file (?).
375     eg. $State: Exp $
376    
377     The keywords are automatically replaced by CVS, even if it's
378     already been expanded. You just put it in and leave it be!
379    
380     Online CVS Resources
381     --------------------
382     That about concludes my guide on the basics of CVS for the
383     development work in the project. However, further resources
384     can be found on the following webpage. I've learnt an awful
385     lot from this "online book", and I'd recommend it to anyone
386     wanting to get to grips with CVS.
387    
388     http://cvsbook.red-bean.com
389    
390     Also, the "home" of CVS, if there is such a thing.
391    
392     http://www.cvshome.org
393    
394     About
395     -----
396     This document was written by Tim Bishop [tdb1@ukc.ac.uk] for
397     use by the team working on a 3rd year Computer Science
398     project called "i-scream". More details can be found on the
399     project website;
400    
401     http://www.i-scream.org.uk