Apache Subversion

Repository types
– Berkeley DB

Two-dimensional filesystem
– Path – files are stored as links to the most recent change
– Revision – each revision in filesystem has its own root, which is used to access contents at that revision

The Subversion filesystem uses transactions to keep changes atomic.

– important feature of the Subversion filesystem
– simple name=value pairs of text
– properties occur on filesystem entries (files, folders,…)

Property Description
svn:executable makes files executable
svn:mime-type stores the “MIME type” of a file
svn:ignore list of filename patterns to ignore in a directory
svn:keywords list of keywords to substitute into a file when changes are made (e.g., author, date of last change, revision number)
svn:eol-style convert end-of-line characters in text files
svn:externals allows parts of other repositories to be automatically checked-out into a sub-directory
svn:needs-lock file is to be checked out with file permissions set to read-only
svn:special when a symbolic link is added to the repository, a file containing the link target is created with this property set
svn:mergeinfo track merge data (revision numbers)
svn:date the date and time stamp of a revision
svn:author the name of the user that submitted the change(s)
svn:log the user-supplied description of the change(s)

Branching and tagging
– branch – a separate line of development
– tag – repository label at a certain point in time, this way it can be easily be found in the future
– in SVN, purpose/use is the only difference
– set up by using the “svn copy” command

Limitations and problems
– implementation of the file and directory rename operation – SVN will still use the old name in older revisions of the “tree”
– lacks some repository-administration and management features
– stores additional copies of data on the local machine (issue with very large projects/files)
– does not store the modification times of files (a checked out file will have the current date, instead of the modification time in the repository, and a checked into file will have the date of the check-in, instead of the modification time of the file being checked in)
– centralized revision control model (insecure programmers)
– does not deal well with the filename normalization performed by the HFS+ filesystem
– SVN does not include an official GUI, third parties have developed different GUIs, along with a wide variety of additional ancillary software

Subversion clients
TortoiseSVN – a Windows shell extension, repository commands can be executed from the enhanced context menu
– Cornerstone – a GUI for Subversion written with Xcode for MacOS X
– SmartSVN

Some programmers prefer to have a client integrated within their development environment:
– AnkhSVN, VisualSVN for use with Microsoft Visual Studio
– Subversive for use with Eclipse
– Delphi XE Subversion integration is built into the Delphi IDE

Apache Subversion
Comparison of Subversion clients