This section is a general discussion of how a Subversion
client and server interact with one another, regardless of the
network implementation you're using. After reading, you'll have
a good understanding of how a server can behave and the
different ways in which a client can be configured to
respond.
The Subversion client spends most of its time managing
working copies. When it needs information from a repository,
however, it makes a network request, and the server responds
with an appropriate answer. The details of the network
protocol are hidden from the user; the client attempts to
access a URL, and depending on the URL schema, a particular
protocol is used to contact the server (see
Repository URLs). Users can run
svn
--version
to see which URL schemas and protocols the
client knows how to use.
When the server process receives a client request, it
typically demands that the client identify itself. It issues
an authentication challenge to the client, and the client
responds by providing credentials back
to the server. Once authentication is complete, the server
responds with the original information the client asked for.
Notice that this system is different from systems like CVS,
where the client pre-emptively offers credentials (“logs
in”) to the server before ever making a request. In
Subversion, the server “pulls” credentials by
challenging the client at the appropriate moment, rather than
the client “pushing” them. This makes certain
operations more elegant. For example, if a server is
configured to allow anyone in the world to read a repository,
then the server will never issue an authentication challenge
when a client attempts to
svn
checkout
.
If the client's network request writes new data to the
repository (e.g.
svn commit
), then a new
revision tree is created. If the client's request was
authenticated, then the authenticated user's name is stored as
the value of the svn:author
property on the
new revision (see
the section called “Unversioned Properties”). If
the client was not authenticated (in other words, the server
never issued an authentication challenge), then the revision's
svn:author
property is empty.
[22]