|
Version Control with Subversion - Subversion in Action - Updates and Commits are Separate
Updates and Commits are Separate
One of the fundamental rules of Subversion is that
a “push” action does not cause
a “pull”, nor the other way around. Just
because you're ready to submit new changes to the repository
doesn't mean you're ready to receive changes from other
people. And if you have new changes still in progress,
then
svn update
should gracefully merge
repository changes into your own, rather than forcing you to
publish them.
The main side-effect of this rule is that it means a
working copy has to do extra bookkeeping to track mixed
revisions, and be tolerant of the mixture as well. It's
made more complicated by the fact that directories
themselves are versioned.
For example, suppose you have a working copy entirely at
revision 10. You edit the
file foo.html and then perform
an
svn commit
, which creates revision 15
in the repository. After the commit succeeds, many new
users would expect the working copy to be entirely at
revision 15, but that's not the case! Any number of changes
might have happened in the repository between revisions 10
and 15. The client knows nothing of those changes in the
repository, since you haven't yet run
svn
update
, and
svn commit
doesn't
pull down new changes. If, on the other hand,
svn commit
were
to
automatically download the newest changes, then it would be
possible to set the entire working copy to revision
15—but then we'd be breaking the fundamental rule
of “push” and “pull” remaining
separate actions. Therefore the only safe thing the
Subversion client can do is mark the one
file—foo.html —as being at
revision 15. The rest of the working copy remains at
revision 10. Only by running
svn update
can the latest changes be downloaded, and the whole working
copy be marked as revision 15.
[an error occurred while processing this directive]
|
|