This is work in progress. Subversion 1.14 has not been released yet.
TODO: If making an alpha release before branching 1.14.x, links to files in ViewVC may need to be temporarily pointed at trunk.
Apache Subversion 1.14 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.13.x is also in 1.14, but 1.14 contains features and bugfixes not present in any earlier release.
Because 1.14 is the next LTS release following 1.10, these release notes describe major changes since 1.10, including changes released in 1.11.x through 1.13.x.
This page describes only major changes. For a complete list of changes, see the 1.14 section of the CHANGES file.
Older clients and servers interoperate transparently with 1.14 servers and clients. However, some of the new 1.14 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.14 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.14 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.14 libraries. However, a program written for 1.14 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 | Minimum Client1 | Minimum Server | Minimum Repository | Notes |
---|---|---|---|---|
svnadmin rev-size | n/a | 1.13 | any FSFS repo | |
svnadmin build-repcache | n/a | 1.14 | FSFS version 6 | |
Shelving (experimental) | 1.12 | any | any | shelves created by 1.10 are not compatible—see Upgrading 1.10–1.13 shelves to 1.14 |
Commit checkpointing (experimental) | 1.12 | 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. |
Subversion 1.14 uses the same working copy format as Subversion 1.8 through 1.13.
Before using Subversion 1.14 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.14 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.14 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.
Since 1.10, Subversion provides an experimental "Shelving" feature aimed at addressing issue #3625. There is no promise of backward compatibility for features designated "experimental."
Shelving in 1.14 has changed significantly since 1.10 and is incompatible with shelves created by 1.10. See Shelving and Checkpointing (experimental) for the major changes and differences in commands. See its subsection, Upgrading 1.10–1.13 shelves to 1.14 to learn how to recover 1.10 shelves in an existing working copy.
This change was first introduced in 1.13.
Add an svnadmin rev-size command to report the total size in bytes of the representation on disk of a revision, including rev-props, but excluding FSFS indexes. For example:
$ svnadmin rev-size /path/to/repo -r1 1337 bytes in revision 1
(See r1857624.)
Representation Sharing (also called rep-sharing) is a data storage de-duplication feature first introduced in Subversion 1.6. It reduces the disk size of a repository by storing duplicate data only once. (See issue #2286.)
This optional feature is enabled by default. It relies on a rep-cache database, which Subversion automatically maintains with the repository, to identify duplicate pieces of data.
Over time, some administrators have disabled and/or re-enabled rep-sharing, which has the effect of excluding from the rep-cache any revisions that were committed while the feature was disabled.
Subversion 1.14 introduces a new svnadmin build-repcache subcommand, which administrators can use to populate any missing entries in the rep-cache database for a specified revision range (or all revisions). (See r1875921.)
For example, to process revisions 20 through 25, inclusive, and ensure that their data is known to the rep-cache:
$ svnadmin build-repcache /path/to/repo -r20:25 * Processed revision 20. * Processed revision 21. * Processed revision 22. * Processed revision 23. * Processed revision 24. * Processed revision 25.
If only one revision argument is given, svnadmin build-repcache will process that revision only:
$ svnadmin build-repcache /path/to/repo -r20 * Processed revision 20.
If no revision argument is given, svnadmin build-repcache will process all revisions.
svn log --quiet and --diff options are no longer mutually exclusive. This makes it easier to display only the differences in a range of revisions. (See r1871916.)
When invoking the user-defined editor, such as during interactive conflict resolution, Subversion now performs escaping of any special characters in the pathname of the file to be edited. This corrects a problem that would occur previously when the file to be edited (and/or the path leading to it) contained spaces or other special characters. (See r1874057, r1874093, and r1875230.)
Note that escaping is performed only on the pathname argument. As before, the editor itself is invoked through the shell and the user must properly quote/escape the command line used to launch it. This is intentional, as it allows the user to construct a shell command which itself contains command line arguments. See the related FAQ entry for more on spaces and/or command line options in the editor path.
The user-defined editor can be specified in the following ways, in this order of precedence:
The escaped pathname of the file to be edited is passed to the editor as its last command line argument.
For example, suppose that $SVN_EDITOR is set as follows:
SVN_EDITOR='vim -N --' export SVN_EDITOR
Furthermore, suppose 'svn up' finds a text conflict in a file called foo bar.txt:
$ svn up Updating '.': C foo bar.txt Updated to revision 2. Summary of conflicts: Text conflicts: 1 Merge conflict discovered in file 'foo bar.txt'. Select: (p) Postpone, (df) Show diff, (e) Edit file, (m) Merge, (s) Show all options: e
When Subversion launches the editor, the spaces in vim -N -- will not be escaped, allowing vim to be invoked with -N and -- as its first two arguments, but the space in foo bar.txt will be escaped.
Since its introduction in 1.10, the new interactive conflict resolver has received various improvements.
Starting in 1.11, the interactive conflict resolver 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".
Furthermore, since 1.12, the interactive conflict resolver supports some cases where items were moved to disparate locations. Support for unversioned items in the working copy has been improved as well. The table below lists these cases and available resolution options for each.
local change | incoming change | operation | resolution options |
---|---|---|---|
|
|
update, merge |
|
|
|
merge |
|
|
|
update, switch |
|
|
|
update, switch |
|
During svn update, the deletion of a directory which contains unversioned items but is otherwise unmodified no longer causes a tree conflict. This avoids tree conflicts caused by software build artifacts in the working copy, for example.
Several bugs have been fixed in the conflict resolver, including:
Fixes for conflict resolver bugs found during the development of Subversion 1.11 and 1.12 have been backported to the Subversion 1.10 release series as well.
This change was first introduced in 1.11.
Add 'schedule' and 'depth' items to 'svn info --show-item' (r1827032).
This change was first introduced in 1.11.
Allow the client cert password to be saved (r1836762).
This change was first introduced in 1.13.
By default, svn help no longer lists experimental commands. To show experimental commands, use svn help -v or svn help --verbose. (See issue #4828.)
This change was first introduced in 1.13.
Some local operations, such as svn st on a large working copy, now perform more quickly as a result of reduced I/O. This is achieved by disabling SQLite's WAL (write-ahead logging) feature, which Subversion does not use, but which introduces more I/O when left enabled. (See r1865523.)
This change was first introduced in 1.11.
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.
This change was first introduced in 1.12.
Subversion servers will now ignore empty group definitions in their path-based authorization rules. The svnauthz command will print a warning if it detects empty group definitions.
This change was first introduced in 1.13.
Add a hint about a possible mod_dav_svn misconfiguration: When warning about an overlapping configuration, if two configuration blocks are for the same URL, then hint that the problem may be including the same configuration twice. (See r1866738.)
This change was first introduced in 1.12.
On Unix-like systems, client-side storage of passwords in plaintext on disk is now disabled by default at compile-time. Password caching mechanisms based on Gnome Keyring, Kwallet, or GPG-Agent, are recommended instead.
This change does not affect Windows or Mac OS platforms, where passwords have always been stored in an encrypted representation.
This change was first introduced in 1.12.
Behaviour of copy operations with a repository source and a working copy target has been improved:
This change was first introduced in 1.12.
The svn list command now avoids truncation of long author names by dynamically adjusting the width of columns displayed.
The svn list command now supports a --human-readable (-H) option which will display sizes in human-readable units (Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes and Petabytes).
This change was first introduced in 1.12.
The svn info command can now display the size of files in the repository. The file size is only displayed if the target of svn info is a file URL.
This change was first introduced in 1.12.
The svn cleanup command, when asked to remove unversioned or ignored items, will now remove directories even if they are write-protected.
Some optional features of Subversion utilize the Python scripting language.
Subversion's SWIG Python bindings and Subversion's test suite now support Python 3.x (and newer).
TODO: Describe which minor releases of Python 3.x we plan to support through the four-year LTS period of Subversion 1.14. Per recent discussions on the dev@ mailing list, that might be some form of "rolling" support: In each 1.14.x patch release, we would make an effort to support the oldest through newest minor lines of Python 3.x that Python upstream supports at the time of our release. However, we could drop support for the oldest one if we have a compelling reason to do so.
Of course, we welcome contributions that extend Subversion's Python support to include other versions, subject to the project's other needs. See the section Enthusiastic Contributors Welcome below.
Python is Optional. Read more below.
As of 1 January 2020, Python 2.7 has reached end of life. All users are strongly encouraged to move to Python 3.
As Subversion 1.14 is a Long Term Support (LTS) release with planned support into 2024, well beyond end-of-life for Python 2.7, the core Subversion developers cannot commit to supporting and testing with Python 2.7, or to fixing bugs that affect Python 2.7 only, for the duration of this support period.
This means that although Subversion 1.14.0 still technically works with Python 2.7, any later 1.14.x point release may drop this support if it becomes too difficult to maintain.
If you must continue using Python 2.7, our previous Long Term Support release, Subversion 1.10, is supported until 2022. Python 2.7 support will not be removed from Subversion 1.10.
Of course, we welcome contributions that extend Subversion's Python 2.7 support, subject to the project's other needs. See the section Enthusiastic Contributors Welcome below.
Subversion does not require Python for its basic operation. Python is only required for building Subversion and for using Subversion's SWIG Python bindings. If you do not do either of these things, then this change does not affect you.
The Python bindings are used by:
In more detail, Python is required for doing any of the following:
Python is not required for doing any of the following:
Subversion's support for Python 3.x SWIG bindings introduces a new optional dependency on the Python 3 Compatibility layer for C extensions (py3c).
You need py3c to build the SWIG Python bindings, regardless of the version of Python. As py3c is a header-only library, it is needed only to build the bindings, not to use them.
The convenience script that downloads Subversion's minimal build-time dependencies, get-deps.sh, has been updated to download py3c. This script is found in the source distribution's root directory. For the full list of Subversion's dependencies, see the INSTALL file in the same directory.
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.
Subversion's SWIG Python bindings can be built with SWIG 4 on Python 3. The bindings can be built with SWIG 3.x on Python 3 as well (the -modern argument to SWIG is automatically used). (See r1869853.)
This change was first introduced in 1.11.
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.
The Subversion 1.14.x release includes several "EXPERIMENTAL" features. These are released in an early form for purposes of testing, feedback, and to entice interested users to contribute to their further development.
WARNING: Features and APIs which are designated "EXPERIMENTAL" are considered incomplete and may change significantly during and after the 1.14.x series. There is no promise of backward compatibility, even from one point release to another, while they remain experimental.
Shelving (issue #3625), first introduced in Subversion 1.10, has been developed further to handle more kinds of changes more robustly. Two different versions of shelving CLIs, each with different pros and cons, are available for experimentation. Also, changes have been made under the hood to support a related feature, Commit Checkpointing (issue #3626).
Shelving in 1.14 is incompatible with shelves created by 1.10. See Upgrading 1.10–1.13 shelves to 1.14 to learn how to recover 1.10 shelves in a working copy.
Shelving commands (see their help for details):
Differences in the main shelving commands since 1.10:
Subversion 1.10 command | Subversion 1.14 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 |
Because shelving is a work-in-progress, the shelving CLI is disabled by default. Users who wish to experiment with shelving should enable one of the two available shelving CLI implementations by setting an environment variable (see r1875037 and r1875039.)
The two implementations are "Shelving-v2" as introduced in 1.11, and "Shelving-v3" as introduced in 1.12. These are incompatible with each other, but both are offered because they have substantially different pros and cons.
The shelving CLI implementation is selected by an environment variable, SVN_EXPERIMENTAL_COMMANDS, as follows:
environment variable | shelving CLI implementation |
---|---|
SVN_EXPERIMENTAL_COMMANDS=shelf3 | Shelving-v3, as introduced in 1.12 |
SVN_EXPERIMENTAL_COMMANDS=shelf2 | Shelving-v2, as introduced in 1.11 |
SVN_EXPERIMENTAL_COMMANDS= | No shelving CLI |
Environment variable not set | No shelving CLI |
The following table summarizes the kinds of changes that can be shelved by the two implementations:
WC State or Change | Shelving-v2 | Shelving-v3 |
---|---|---|
file text, file delete/add, most properties | yes | yes |
mergeinfo changes | yes | yes |
copies and moves | no | as copies1 |
directories (mkdir/rmdir/...) | no | yes |
binary files & properties | yes | yes |
1On shelving, a move is converted to copy-and-delete, just like it is on commit. |
Shelving-v2, first introduced in 1.11, improves upon the initial shelving feature introduced in 1.10. The main improvements and changes are:
Shelving-v2 can shelve committable changes to files and properties, except the following kinds which it does not support:
Shelving-v3, first introduced in 1.12, can handle more kinds of changes than Shelving-v2. In particular, it supports shelving of all committable changes. However, it performs much more slowly than Shelving-v2 and uses more disk space, especially when used with large working copies.
This version of shelving represents a series of significant refactorings under the hood to eventually support better shelving, commit checkpointing, and the possibility of future client-side features for manipulating and sharing committable changes.
The presence in the working copy of any shelves that were created by Subversion 1.10 has no effect on a Subversion 1.14 client. Subversion 1.14 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.
In Subversion 1.14, shelves are 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
This change was first introduced in 1.11.
Since 1.11, Subversion provides an experimental first cut at solving some of the use cases envisioned in issue #3626 named "Commit checkpointing".
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 |
Further information can be found in the Subversion Wiki under Shelving and Checkpointing, including internal design and development notes.
This change was first introduced in 1.11.
There is an experimental command to write out a view spec describing the current WC shape.
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.
There are some known issues in the Subversion 1.14 releases. These may be fixed in later 1.14.x releases.
This change was first introduced in 1.11.
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.
1.14 is a Long-Term Support (LTS) release. See Supported Versions and How We Plan Releases.
The Subversion 1.10.x line is now the old stable version. This means that 1.10.x will still receive security relevant fixes as well as bugfixes. While we will evaluate any bugreport with regards to its severity, there might be issues with a lower severity which will only get fixed in 1.14.x, particularly if the patches would be invasive, destabilizing, and/or require a significant investment to get backported to the old stable version.
Therefore, if you are running into an issue with the old stable version which has already been fixed in the latest version, we might ask you to upgrade to that version to resolve the issue.
The Subversion 1.9.x line is end of life (EOL). This doesn't mean that your 1.9 installation is doomed; if it works well and is all you need, that's fine. "End of life" just means we've stopped accepting bug reports against 1.9.x versions, and will not make any more 1.9.x releases.
You can contribute to Subversion!
As Subversion is an open source project developed and supported by volunteers, we are always happy to welcome enthusiastic participants to the community.
Whether you'd like to see support for additional versions of Python, want to help finish Shelving and Checkpointing, or have ideas for some big new features, if you're willing to invest the effort, Subversion can be anything you imagine.
Join the conversation by email: For our mailing lists, see https://subversion.apache.org/mailing-lists.html
Or by IRC at irc.freenode.net:
Get the source:
$ svn checkout https://svn.apache.org/repos/asf/subversion/trunk/
Join us today!