The Apache Subversion project recently announced the availability of its latest major release, version 1.8.0. The release delivers a collection of features and enhancements designed to facilitate administration and deliver enterprise-class functionality while maintaining Subversion's oft-celebrated shallow learning curve. In this article, I'll present a very brief overview of some of the highlights of this release.
Let's start with what's new on the client side. Subversion's merge tracking feature was the focus of much developer attention in this release. The flagship feature of the 1.5 release, merge tracking initially served to reinforce Subversion's position as the most popular and widely used Open Source version control system in the world, and the feature has seen continued improvement in every subsequent major release of the software. In version 1.8, developers focused on ways to further simplify Subversion's merge operation and eliminate the need for users to manually select which merge model to employ. Additionally, the updated software delivers some common-sense safeguards against attempted merges of unrelated resources, and allows repeated reintegration of changes introduced on a branch back to that branch's parent.
Subversion 1.8 is the first in a series of releases which aim to address Subversion's historically lackluster support for moved and renamed objects. Building atop the new flexible working copy administration module (WC-NG) introduced in 1.7, clients will now track moved objects more completely and use the additional information to help users make informed choices when resolving certain tree conflict scenarios. Future releases will see moves propagated through the network layers, into the repository, and back again for system-wide first-class handling.
Developers also overhauled Subversion's conflict detection and management in this release. Conflict resolution was moved to a separate phase of the update and merge operations, allowing users the freedom to perform potentially long-running operations in an unattended fashion. The interactive conflict resolution mechanism grew additional functionality by means of a built-in file merge tool which offers per-region resolution granularity, and is now also available on demand via the svn resolve subcommand.
While versioned properties are generally the domain of Subversion clients, Subversion administrators frustrated with trying to enforce project policies governed by user settings are the beneficiaries of a new repository-dictated configuration mechanism. Building atop support for inheritable properties (which was also introduced in this release), 1.8 clients will honor new “svn:auto-props” and “svn:global-ignores” properties as the versioned companions of their runtime configuration counterparts. Projects that wish to consolidate and achieve team-wide unification of these options may now do so in a way that keeps the configuration alongside the very data it affects – and outside the scope of other projects which may have differently defined configuration policies.
Additional client-side improvements include support for custom-defined keywords, an integration with the GnuPGP Agent as a short-term password store, and a collection of new output mode options for displaying content differences. The commit operation has also been enhanced to optionally include in the commit payload changes made in external working copies (those managed via the “svn:externals” property) which are pulled from the same repository, allowing organizations to further modularize interdependent source codebases while still enjoying the benefits of atomic commits across module lines.
Subversion 1.8 delivers a number of improvements to the network, server, and repository storage layers, too. Developers introduced changes to the FSFS versioned data store aimed at increasing performance and reducing – in some cases, drastically – repository disk usage. Both servers were enhanced, too, with svnserve obtaining support for high-speed networks, and the mod_dav_svn Apache HTTP Server module growing a number of features and related configuration options. Subversion's path-based authorization files may now be stored in and directly read from repositories, allowing yet another bit of system configuration to live alongside the date it affects and, in this case, facilitating the propagation of that information in WebDAV write-through proxy deployment scenarios. Finally, HTTP-based interactions were further optimized by the project's migration from Neon to Serf as the HTTP communications library of choice. This assures support for request pipelining and cooperation with content caching proxies.
Consistent with the Subversion project's history on such things, upgrading your existing servers to Subversion 1.8 is a relatively painless task. The new software continues to operate against all previous repository schema versions, and maintains ABI and hook script interface compatibility with prior releases. As such, administrators need not dump and reload their repositories. However, in order to take full advantage of some of the new features and performance-related improvements, you may need to perform in-place upgrades (using svnadmin upgrade) of your repositories and perform additional minor repository and server configuration tweaks.
Subversion's working copy administrative data schema was modified in this release as well, necessitating in-place upgrade (via svn upgrade) of existing working copies before they can be fully used with 1.8 clients. Fortunately, users who upgrade their clients will enjoy the benefits of the newly introduced client features and enhancements regardless of whether the servers to which they connect have been likewise upgraded.
Overall, the messaging of this latest major Subversion release is a continued emphasis on making version control easier for medium- and large-scale projects with nontrivial data sets and complex branch topographies, and on chipping away at technical debt spotlighted by Subversion's enormous success and adoption rate.
For more information about Apache Subversion 1.8, watch the replay of a webinar I recently delivered on the topic (accessible at http://www.open.collab.net/media/replays/apache-subversion-18) and see the project's official release notes.