A summary of the experimental Shelving feature added in Subversion 1.10.

(For a summary of the latest development of shelving and checkpointing, see Shelving in Svn-trunk. For an index of all pages in this topic, see Shelving and Checkpointing.)


This initial version of shelving is based on patch files.

Shelving is roughly equivalent to using "svn diff" to write local changes to a patch file, followed by reverting the shelved changes. Unshelving is roughly equivalent to using "svn patch" to apply a patch file.

The kinds of change that can be shelved and unshelved are the same kinds that "svn diff" and "svn patch" support – basically that is changes to text files and properties. Details are below.


Command-Line UI

see Shelving v1 CLI

  • shelve name [paths/changelist]: save a WC diff

    • reverts the successfully shelved changes from the WC

  • unshelve [name]: apply specified (or newest) shelved patch to WC

    • removes the patch (or rather renames to '*.bak' so not shown in list)

    • can apply to any revision or branch

  • list shelved patches

  • delete a shelved patch

Kinds of change that can be shelved

WC State or Change

Shelving v1

committable changes

file text, file delete/add, most properties


mergeinfo changes


copies and moves


directories (mkdir/rmdir/...)


binary files & properties


uncommittable state

unresolved conflicts


changelist assignment


unversioned items (git stash -u/-a)


inconsistent WC states (missing/obstructed)


base state

WC base state (rev, URL, switched, depth)


Conflicts and Error Handling

When 'shelve' encounters any unshelvable state ... [TODO]

When 'unshelve' encounters any conflict, it is handled just like 'svn patch'. That means, in most cases, printing a warning message and creating a '*.svnpatch.rej' file.


  • library functions implemented in libsvn_client
  • not exposed through bindings (SWIG, JavaHL, etc.)

Client-level support (user interfaces):

  • 'svn' command-line UI
  • TortoiseSVN (for Windows)
  • Cornerstone (for Mac)

Shelves are stored as standard svn patch files in WC metadata dir '.svn/shelves/'.

  • No labels