Apache Software Foundation
[S] Subversion

Apache Subversion 1.11 Release Notes

New 6-month regular and 2-year LTS release schedule.

Subversion 1.11 is the first of the new 6-month regular releases with an emphasis on introducing new features more quickly and a shorter support period. See Subversion 1.11 is a Regular Release below.

What's New in Apache Subversion 1.11

Apache Subversion 1.11 is a superset of all previous Subversion releases, and is as of the time of its release considered the current "best" release. Any feature or bugfix in 1.0.x through 1.10.x is also in 1.11, but 1.11 contains features and bugfixes not present in any earlier release. The new features will eventually be documented in a 1.11 version of the free Subversion book (svnbook.red-bean.com).

This page describes only major changes. For a complete list of changes, see the 1.11 section of the CHANGES file.

Compatibility Concerns

Older clients and servers interoperate transparently with 1.11 servers and clients. However, some of the new 1.11 features may not be available unless both client and server are the latest version. There are also cases where a new feature will work but will run less efficiently if the client is new and the server old.

There is no need to dump and reload your repositories. Subversion 1.11 servers can read and write to repositories created by earlier versions. To upgrade an existing server installation, just install the newest libraries and binaries on top of the older ones.

Subversion 1.11 maintains API/ABI compatibility with earlier releases, by only adding new functions, never removing old ones. A program written to any previous 1.x API can both compile and run using 1.11 libraries. However, a program written for 1.11 cannot necessarily compile or run against older libraries.

There may be limited cases where the behavior of old APIs has been slightly modified from previous releases. These are cases where edge cases of the functionality has been deemed buggy, and therefore improved or removed. Please consult the API errata for more detailed information on what these APIs are and what impact these changes may have.

New Feature Compatibility Table

New Feature Minimum Client1 Minimum Server Minimum Repository Notes
Shelving (experimental) 1.11 any any shelves created by 1.10 are not compatible—see the transition notes
Commit checkpointing (experimental) 1.11 any any
Viewspec output command (experimental) 1.11 any any
1Reminder: when using the file:// repository access method, the Subversion program is both the client and the server.

Upgrading the Working Copy

Subversion 1.11 uses the same working copy format as Subversion 1.8 through 1.10.

Before using Subversion 1.11 with an existing Subversion 1.7 or older working copy, users will be required to run the svn upgrade command to upgrade working copy metadata to the new format. This command may take a while in some cases, and for some users, it may be more practical to simply checkout a new working copy.

Note: Subversion 1.11 cannot upgrade working copies that a 1.6 client would have refused to operate upon before an svn cleanup was run (with a 1.6 client). In other words, before upgrading to 1.8 or newer, a 1.6 or older client must be used to run svn cleanup on all 1.6 or older working copies that require cleanup. Likewise, Subversion 1.11 cannot upgrade corrupt working copies. Unfixable problems can arise from missing or corrupt meta-data inside .svn directories. Such damage to the working copy is permanent, and cannot be fixed even if svn cleanup is run prior to the upgrade.

If your working copy does not upgrade cleanly, please check out a new one.

Shelving (experimental): transition from 1.10

The presence in the working copy of any shelves that were created by Subversion 1.10 has no effect on a Subversion 1.11 client. Subversion 1.11 will ignore them; it cannot interoperate with them nor even list their presence.

The svn upgrade command has no effect, as the working copy format is formally unchanged.

Shelves are currently stored under <WC>/.svn/experimental/shelves/. In Subversion 1.10, shelves were stored under <WC>/.svn/shelves/ as patch files.

To recover a shelf created by 1.10, either

  • use a 1.10 client to find and unshelve it, or
  • find the patch file by hand and use any 1.10 or later svn patch to apply it.

Differences in the main shelving commands:

Subversion 1.10 command Subversion 1.11 equivalent
svn [x-]shelve [--keep-local] SHELF [PATH...] works similarly; saves a new version each time it is used
svn [x-]unshelve [SHELF] svn x-unshelve --drop [SHELF]
svn [x-]unshelve --keep-shelved [SHELF] svn x-unshelve [SHELF]
svn [x-]shelve --delete SHELF svn x-shelf-drop SHELF
svn [x-]shelves or svn [x-]shelve --list svn x-shelves or svn x-shelf-list

Miscellaneous Compatibility Notes

There are some additional specific areas where changes made in this release might necessitate further adjustment by administrators or users. We'll cover those in this section.

SHA-1 checksums will no longer be published for released artifacts (subversion-1.11.x.tar.* and subversion-1.11.x.zip)

The release artifacts—subversion-1.11.x.tar.bz2, subversion-1.11.x.tar.gz, and subversion-1.11.x.zip—are no longer accompanied by *.sha1 files containing SHA-1 checksums, nor will SHA-1 checksums be advertised on the download page or in release announcements. PGP digital signatures and SHA-512 checksums will continue to be provided.

We consider the SHA-1 cryptographic hash function too weak for our needs.

New Features

Commit checkpointing (experimental)

Subversion 1.11 provides an experimental first cut at solving some of the use cases envisioned in issue #3626 named "Commit checkpointing".

WARNING: The checkpointing feature is designated "EXPERIMENTAL" in 1.11. It is being released in an early form while development continues. It is expected to change significantly during and after the 1.11.x series. There is no promise of backward compatibility while it remains experimental.

It provides the ability to save a snapshot of an uncommitted change from time to time, and later restore one of those previous versions of your change back into the working copy.

It does not provide the kind of exact WC state roll back that is also discussed in that issue, that could make it possible after a messy update to roll back to the exact WC state that existed just before. This remains a future possibility.

The ability to checkpoint and roll back an uncommitted change is provided within the shelving feature, by letting a shelf hold multiple versions of your change. Therefore, see also Shelving.

The main checkpointing operations are accomplished by the following commands, as also listed in the Wiki page:

Save a checkpoint and continue svn x-shelf-save foo copy the local changes into a new version of shelf 'foo';
doesn't revert the changes from the WC
Save a checkpoint and shelve svn x-shelve foo move the local changes into a new version of shelf 'foo'
and revert the changes from the WC
Restore / roll back first revert your unwanted changes; then
svn x-unshelve foo 3
apply version 3 of shelf 'foo' to the WC
and delete any newer versions
Review checkpoints svn x-shelf-log foo list all the versions of shelf 'foo'
svn x-shelf-diff foo 3 show version 3 as a diff

Enhancements and Bugfixes

Command-line client improvements (client)

Improved Shelving (experimental)

Shelving (issue #3625), first introduced in Subversion 1.10, is improved in 1.11 to handle more kinds of changes more robustly.

WARNING: The shelving feature is designated "EXPERIMENTAL" in 1.11. It is being released in an early form while development continues. It is expected to change significantly during and after the 1.11.x series. There is no promise of backward compatibility while it remains experimental.

Shelving in 1.11 is incompatible with shelves created by 1.10. See the transition notes on recovering 1.10 shelves and differences in commands.

The main improvements and changes are:

  • checkpointing support: a shelf stores multiple versions of a change; shelving adds a new version to the named shelf; you can unshelve an older version instead of the newest—see the checkpointing feature
  • 'binary' files (and property values) are fully supported
  • patch files are no longer used as the storage mechanism; limitations and bugs due to patch file format are gone, such as handling svn:mergeinfo properties, binary data, and end-of-line characters
  • shelving and unshelving both warn and refuse to run if they detect states that they cannot handle (e.g. copies or moves)
  • unshelving applies the changes to the WC using a mechanism similar to merging, so that changes can be more robustly applied when the WC has been modified (e.g. updated) since the shelf was saved

The kinds of change you can shelve are committable changes to files and properties, except the following kinds which are not yet supported:

  • copies and moves
  • creating and deleting directories

Shelving commands (see their help for details):

  • svn x-shelf-diff
  • svn x-shelf-drop
  • svn x-shelf-list, x-shelves
  • svn x-shelf-list-by-paths
  • svn x-shelf-log
  • svn x-shelf-save
  • svn x-shelve
  • svn x-unshelve

Further information can be found in the Subversion Wiki under Shelving and Checkpointing.

Improvements to the interactive conflict resolver

The interactive conflict resolver now supports more conflict situations which involve moved files and directories. Specifically, many tree conflicts which report a "locally missing" item, as a result of an item having moved on the merge source branch, can now be resolved automatically.

For example, when a file edit is cherry-picked from a branch on which the edited file has been renamed, the edit will now be applied to the file's location in the merge target branch, provided it has not been renamed on that branch as well. For details, see issue #4694, "Unresolvable tree conflict when cherrypicking a file-edit after file was moved on source branch".

Several bugs have been fixed in the conflict resolver, including:

Fixes for conflict resolver bugs found during the development of Subversion 1.11 have been backported to the Subversion 1.10 release series as well.

Viewspec output command (experimental) (issue #4753)

There is an experimental command to write out a view spec describing the current WC shape.

WARNING: This feature is designated "EXPERIMENTAL" in 1.11. It is being released in an early form while development continues. It is expected to change significantly during and after the 1.11.x series. There is no promise of backward compatibility while it remains experimental.

A view spec describes whether each subtree is at a limited depth, excluded, switched to a different URL, or updated to a different revision number, compared with its parent directory. This information is sometimes referred to as the shape or the layout of a WC.

'svn info --x-viewspec=classic' writes in the format used by the old script tools/client-side/svn-viewspec.py.

'svn info --x-viewspec=svn11' writes a series of 'svn' command lines. You can create a new WC of the same layout by running these commands.

Additions to svn info --show-item

Add 'schedule' and 'depth' items to 'svn info --show-item' (r1827032).

Allow the client cert password to be saved

Allow the client cert password to be saved (r1836762).

Server-side improvements

svnadmin dump shouldn't canonicalize svn:date (issue #4767)

svnadmin dump no longer attempts to canonicalize the svn:date revision property value in its output. The dump output will now contain the value exactly as it exists in the repository.

Client- and server-side improvements

API changes, improvements and language bindings (client and server)

JavaHL Updates

The JavaHL bindings have been updated to be compatible with Java 10. Due to required build changes, JavaHL now requires at least Java 8 to compile.

Known issues in the release

There are some known issues in the Subversion 1.11 releases. These may be fixed in later 1.11.x releases.

Ruby bindings require swig 3.0.9

This section only affects those who build Subversion from a working copy. If you build Subversion from a tarball or zip file, you may skip this section.

The Ruby bindings are known not to build with swig version 3.0.8 (and only that version) due to swig issue #602. We recommend to use swig 3.0.9 or newer.

The failure is detected by the test suite. To test whether your version of swig is affected, run make check-swig-rb. (Some distros might have backported the swig patch into their swig-3.0.8 packages.)

The Perl and Python bindings are not affected.

Github's SVN Bridge server implementation incompatible with SVN 1.11

Issue #4789

During November 2018 Subversion 1.11 clients were unable to check out repositories from Github. Stricter DAV RFC conformance checks had been added to SVN 1.11 clients, and Github's custom SVN server implementation did not conform to the newly expected behaviour. Github has since fixed the issues on their end, so all Subversion clients should be able to use Github's SVN bridge again.

Subversion 1.11 is a Regular Release

Subversion 1.11 is the first of the new 6-month regular releases with an emphasis on introducing new features more quickly and a shorter support period.

Subversion 1.9 and 1.10 are still supported, now being regarded as long-term support (LTS) releases. The next LTS release is expected to be numbered 1.14, to be released two years after 1.10.

For further details see How We Plan Releases.