| prev | Version 1107 (Mon Nov 27 20:45:57 2006) | next |
print statements![[Managing Multi-Author Collaboration]](./img/version/multi_author_collab.png)
Figure 5.1: Managing Multi-Author Collaboration
![[Version Control as a Time Machine]](./img/version/time_machine.png)
Figure 5.2: Version Control as a Time Machine
Perforce is excellentCVS and Subversion are:CVS has been around since the 1980sSubversion developed from 2000 onward as a workalike replacementsolarsystem project repositorysvn update to synchronize his working copy with the repositoryjupiter directory and creates moons.txtName Orbital Radius Orbital Period Mass Radius Io 421.6 1.769138 893.2 1821.6 Europa 670.9 3.551181 480.0 1560.8 Ganymede 1070.4 7.154553 1481.9 2631.2 Callisto 1882.7 16.689018 1075.9 2410.3
svn add moons.txt to bring it to Subversion's noticesvn commit to save his changes in the repositorysvn update on her working copySubversion sends her Ron's changes![[The Basic Edit/Update Cycle]](./img/version/edit_update_cycle.png)
Figure 5.3: The Basic Edit/Update Cycle
RapidSVN is a GUI that runs on Windows, Linux, and Mac![[RapidSVN]](./img/version/rapidsvn.png)
Figure 5.4: RapidSVN
TortoiseSVN is a Windows shell extension![[TortoiseSVN]](./img/version/tortoisesvn.png)
Figure 5.5: TortoiseSVN
Subversion) do thismoons.txt and commits his changes to create version 152Name Orbital Radius Orbital Period Mass Radius Io 421.6 1.769138 893.2 1821.6 Europa 670.9 3.551181 480.0 1560.8 Ganymede 1070.4 7.154553 1481.9 2631.2 Callisto 1882.7 16.689018 1075.9 2410.3 Amalthea 181.4 0.498179 0.075 131 x 73 x 67 Himalia 11460 250.5662 0.095 85 Elara 11740 259.6528 0.008 40
moons.txtName Orbital Radius Orbital Period Mass Radius
(10**3 km) (days) (10**20 kg) (km)
Io 421.6 1.769138 893.2 1821.6
Europa 670.9 3.551181 480.0 1560.8
Ganymede 1070.4 7.154553 1481.9 2631.2
Callisto 1882.7 16.689018 1075.9 2410.3
Amalthea 181.4 0.498179 0.075 131
Himalia 11460 250.5662 0.095 85
Elara 11740 259.6528 0.008 40
Pasiphae 23620 743.6 0.003 18
Sinope 23940 758.9 0.0008 14
Lysithea 11720 259.22 0.0008 12
Subversion tells her there's a conflict![[Merging Conflicts]](./img/version/conflict_merge.png)
Figure 5.6: Merging Conflicts
Subversion puts Hermione's changes and Ron's in moons.txtName Orbital Radius Orbital Period Mass Radius
(10**3 km) (days) (10**20 kg) (km)
Io 421.6 1.769138 893.2 1821.6
Europa 670.9 3.551181 480.0 1560.8
Ganymede 1070.4 7.154553 1481.9 2631.2
Callisto 1882.7 16.689018 1075.9 2410.3
<<<<<<< .mine
Amalthea 181.4 0.498179 0.075 131
Himalia 11460 250.5662 0.095 85
Elara 11740 259.6528 0.008 40
Pasiphae 23620 743.6 0.003 18
Sinope 23940 758.9 0.0008 14
Lysithea 11720 259.22 0.0008 12
=======
Amalthea 181.4 0.498179 0.075 131 x 73 x 67
Himalia 11460 250.5662 0.095 85
Elara 11740 259.6528 0.008 40
>>>>>>> .r152
<<<<<<< shows the start of the section from the first file======= divides sections>>>>>>> shows the end of the section from the second fileSubversion also creates:moons.txt.mine: contains Hermione's changesmoons.txt.151: the file before either set of changesmoons.txt.152: the most recent version of the file in the repositorysvn revert moons.txt to throw away her changesmoons.txtmoons.txt to remove the conflict markerssvn resolved moons.txt to let Subversion know she's donesvn commit to commit her changes (creating version 153 of the repository)svn diff shows him which files he has changed, and what those changes aresvn revert to discard his workmoons.txtsvn log shows recent historysvn merge -r 157:156 moons.txt will do the trick-r flag specifies the revisions involved![[Rolling Back]](./img/version/rollback.png)
Figure 5.7: Rolling Back
/svn/rotor)cd /svnsvnadmin create rotorsvn checkout file:///svn/rotorsvn checkout http://www.hogwarts.edu/svn/rotorsvn checkout once, to initialize your working copysvn update in that directorysvn co http://www.hogwarts.edu/svn/rotor/engine/dynamics| Name | Purpose | Example |
|---|---|---|
svn add | Add files and/or directories to version control. | svn add newfile.c newdir |
svn checkout | Get a fresh working copy of a repository. | svn checkout https://your.host.name/rotor/repo rotorproject |
svn commit | Send changes from working copy to repository (inverse of update). | svn commit -m "Comment on the changes" |
svn delete | Delete files and/or directories from version control. | svn delete oldfile.c |
svn help | Get help (in general, or for a particular command). | svn help update |
svn log | Show history of recent changes. | svn log --verbose *.c |
svn merge | Merge two different versions of a file into one. | svn merge -r 18:16 spin.c |
svn mkdir | Create a new directory and put it under version control. | svn mkdir newmodule |
svn rename | Rename a file or directory, keeping track of history. | svn rename temp.txt release_notes.txt |
svn revert | Undo changes to working copy (i.e., resynchronize with repository). | svn revert spin.h |
svn status | Show the status of files and directories in the working copy. | svn status |
svn update | Bring changes from repository into working copy (inverse of commit). | svn update |
| Table 5.1: Common Subversion Commands | ||
svn status compares your working copy with the repository$ svn statusM jupiter/moons.txtC readme.txt
jupiter/moons.txt has been modifiedreadme.txt has conflictssvn update prints one line for each file or directory it does something to$ svn updateA saturn/moons.txtU mars/mars.txt
saturn/moons.txt has been addedmars/mars.txt has been updated (i.e., someone else modified it)Exercise 5.1:
Follow the instructions given to you by your instructor to
check out a copy of the Subversion repository you'll be using in
this course. Unless otherwise noted, the exercises below
assume that you have done this, and that your working copy is in
a directory called course. You will submit all of your
exercises in this course by checking files into your
repository.
Exercise 5.2:
Create a file course/ex01/bio.txt (where
course is the root of your working copy of your
Subversion repository), and write a short biography of yourself
(100 words or so) of the kind used in academic journals,
conference proceedings, etc. Commit this file to your
repository. Remember to provide a meaningful comment when
committing the file!
Exercise 5.3:
What's the difference between mv and svn
mv? Put the answer in a file called
course/ex01/mv.txt and commit your changes.
Once you have committed your changes, type svn
log in your course directory. If you didn't know
what you'd just done, would you be able to figure it out from
the log messages? If not, why not?
Exercise 5.4:
In this exercise, you'll simulate the actions of two people editing a single file. To do that, you'll need to check out a second copy of your repository. One way to do this is to use a separate computer (e.g., your laptop, your home computer, or a machine in the lab). Another is to make a temporary directory, and check out a second copy of your repository there. Please make sure that the second copy isn't inside the first, or vice versa—Subversion will become very confused.
Let's call the two working copies Blue and Green. Do the following:
a) Create Blue/ex01/planets.txt, and add the
following lines:
Mercury Venus Earth Mars Jupiter Saturn
Commit the file.
b) Update the Green repository. (You should get a copy of
planets.txt.)
c) Change Blue/ex01/planets.txt so that it reads:
1. Mercury 2. Venus 3. Earth 4. Mars 5. Jupiter 6. Saturn
Commit the changes.
d) Edit Green/ex01/planets.txt so that its contents
are as shown below. Do not do svn update
before editing this file, as that will spoil the
exercise.
Mercury 0 Venus 0 Earth 1 Mars 2 Jupiter 16 (and counting) Saturn 14 (and counting)
e) Now, in Green, do svn update. Subversion
should tell you that there are conflicts in planets.txt.
Resolve the conflicts so that the file contains:
1. Mercury 0 2. Venus 0 3. Earth 1 4. Mars 2 5. Jupiter 16 6. Saturn 14
Commit the changes.
f) Update the Blue repository, and check that
planets.txt now has the same content as it has in the
Green repository.
Exercise 5.5:
Add another line or two to course/ex01/bio.txt and
commit those changes. Then, use svn merge to restore
the original contents of your biography
(course/ex01/bio.txt), and commit the result. When you
are done, bio.txt should look the way it did at the end
of the first part of the previous exercise.) Note: the purpose
of this exercise is to teach you how to go back in time to get
old versions of files—while it would be simpler in this
case just to edit bio.txt, you can't (reliably) do that
when you've made larger changes, to multiple files, over a
longer period of time.
Exercise 5.6:
Subversion allows users to set properties on files and
directories using svn propset, and to inspect their
values using svn propget. Describe three properties
you might want to change on a file or directory, and how you
might use them in your current project.
| prev | Copyright © 2005-06 Python Software Foundation. | next |