The Subversion client spends most of its time managing working copies. When it needs information from a remote 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 scheme, a particular protocol is used to contact the server (see the sidebar Repository URLs).
When the server process receives a client request, it often 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 that the client asked for. Notice that this system is different from systems such as CVS, where the client preemptively 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, the server will never issue an authentication challenge when a client attempts to svn checkout.
If the particular network requests issued by the client result in
a new revision being created in the repository (e.g., svn commit), Subversion uses the authenticated
username associated with those requests as the author of the revision.
That is, the authenticated user’s name is stored as the value of the
svn:author
property on the new
revision (see Subversion Properties). If the client was
not authenticated (i.e., if the server never issued an authentication
challenge, the revision’s never issued an authentication challenge),
then the revision’s svn:author
property is empty.