What is your favorite non obvious feature of svn?
svn log -r BASE:HEAD (possibly with a v option)
Shows what's happened between your version and the head version. Usually tells you who broke the build as well.
In newer versions: interactive conflict resolution. This way, conflicts don't need to be resolved manually (in most cases, it's very trivial to do this, it's just annoying if it has to be done for a large batch of files). But really, conflict handling in general (i.e. that it blocks you from committing conflicting files).
Getting the history of a branch from the branching point:
svn log --stop-on-copy
The subversion api and libraries. You can use a central SVN repository even if you prefer to work with a distributed VCS - either using the "svn native" SVK or for example Mercurial (via a bridge). Good apis also mean better tools are possible - they can work with SVN directly, instead of using the commandline client and trying to parse the results.
Hook scripts (start-commit, pre-commit, post-commit) are great tools for a build system relying on SVN.
Another one which is probably too "obvious", is calling 'svn export' from a build script. It's a really nice way to deploy files to some target directory (a website for example), because you get a clean copy without .svn hidden files. It's far better than updating a remote "deployment" working copy.
The Subversion api and the client bindings that are built on top of that.
Most SCM systems are a combination of tools that allow calling them via a commandline, but subversion is designed as a stable API to be used by multiple clients. It just provides a commandline client on top of that.
TortoiseSVN, AnkhSVN, SharpSvn, and dozens of other applications and libraries[1] wouldn't be there without subversion being an api.
(I'm glad some of the other/new SCM implementations are starting to realize that a commandline client is not enough to be successfull)
[1] The link page is now offline, but you can still see the old version on http://svn.apache.org/repos/asf/subversion/branches/1.6.x/www/links.html
And a second answer:
svn status --depth files <path>
This depth support introduced in 1.5 makes Subversion so much faster than before from other tools.
svn log --xml
Having the logs outputted in xml makes them very easy to parse and analyze.
externals.
The wonderful ability to pull 3rd party libraries into your code base and keep them up to date.
svn diff
, even when you're offline and might think diff:ing is not possible.
To back out a changeset from your working copy (eg. 4321):
svn merge -c -4321 .
svn checkin
Or multiple changesets:
svn merge -c -4321,-5432 .
My favorite nonobvious feature of svn is how it litters all of my source directories with .svn metadata subdirectories. ;)
came across while searching for something . . here's a favorite non ovbious one from my side .. you can copy paste the "svn working copy" to any other machine or any other OS, its works as if it was checked out there. This works even if it was checked out by a different user !!
The option to configure an slave repository to mirror the main one. So a remote group can make all their reads from a local copy. It really accelerates the development.
Added in svn 1.6: The caret ^
shorthand notation to shorten subversion URLs when using the command line. The caret symbol can be used in place of the portion of the URL up through the repository name.
Ex:
svn switch ^/myProject/branches/fooBranch
instead of
svn switch http://machine22/repos/SandboxRepo/myProject/branches/fooBranch
svn cleanup
When that also says "Run svn cleanup to clean"
find . |grep \\.svn/lock |xargs rm
Cross-platform support for Unicode filenames
I'm working in a Japanese company, so Subversion's Unicode filename support is great. I've been disappointed to see how poorly Unicode filenames are handled by git and Mercurial in comparison (particularly under Windows).
(I also appreciate how well Subversion handles Unicode in log messages etc.)
Uninstall - so I can go back to using Vault, where my modification dates are maintained, I can see who is editing other files in my project, and I rarely have to waste time merging. :P