Version Control with Subversion - Subversion in Action - Revisions
Revisions
An
svn commit
operation can publish
changes to any number of files and directories as a single
atomic transaction. In your working copy, you can change
files' contents, create, delete, rename and copy files and
directories, and then commit the complete set of changes as a
unit.
In the repository, each commit is treated as an atomic
transaction: either all the commit's changes take place, or
none of them take place. Subversion tries to retain this
atomicity in the face of program crashes, system crashes,
network problems, and other users' actions.
Each time the repository accepts a commit, this creates a
new state of the filesystem tree, called a
revision. Each revision is assigned a
unique natural number, one greater than the number of the
previous revision. The initial revision of a freshly created
repository is numbered zero, and consists of nothing but an
empty root directory.
Figure 2.7, “The repository” illustrates a nice way to
visualize the repository. Imagine an array of revision
numbers, starting at 0, stretching from left to right. Each
revision number has a filesystem tree hanging below it, and
each tree is a “snapshot” of the way the
repository looked after a commit.
It's important to note that working copies do not always
correspond to any single revision in the repository; they may
contain files from several different revisions. For example,
suppose you check out a working copy from a repository whose
most recent revision is 4:
calc/Makefile:4
integer.c:4
button.c:4
At the moment, this working directory corresponds exactly
to revision 4 in the repository. However, suppose you make a
change to button.c , and commit that
change. Assuming no other commits have taken place, your
commit will create revision 5 of the repository, and your
working copy will now look like this:
calc/Makefile:4
integer.c:4
button.c:5
Suppose that, at this point, Sally commits a change to
integer.c , creating revision 6. If you
use
svn update
to bring your working copy
up to date, then it will look like this:
calc/Makefile:6
integer.c:6
button.c:6
Sally's change to integer.c will
appear in your working copy, and your change will still be
present in button.c . In this example,
the text of Makefile is identical in
revisions 4, 5, and 6, but Subversion will mark your working
copy of Makefile with revision 6 to
indicate that it is still current. So, after you do a clean
update at the top of your working copy, it will generally
correspond to exactly one revision in the repository.
[an error occurred while processing this directive]
|