Name
svn switch — Update working copy to a different URL.
Synopsis
svn switch URL [PATH]
switch --relocate FROM TO [PATH...]
Description
This subcommand updates your working copy to mirror
a new URL—usually a URL which shares a common
ancestor with your working copy, although not
necessarily. This is the Subversion way to move a
working copy to a new branch. See
the section called “Switching a Working Copy” for an in-depth look at
switching.
Switches
--revision (-r) REV
--non-recursive (-N)
--quiet (-q)
--diff3-cmd CMD
--relocate
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR
Examples
If you're currently inside the directory
vendors
which was branched to
vendors-with-fix
and you'd like to
switch your working copy to that branch:
$ svn switch https://svn.red-bean.com/repos/branches/vendors-with-fix .
U myproj/foo.txt
U myproj/bar.txt
U myproj/baz.c
U myproj/qux.c
Updated to revision 31.
And to switch back, just provide the URL to the
location in the repository from which you originally
checked out your working copy:
$ svn switch https://svn.red-bean.com/repos/trunk/vendors .
U myproj/foo.txt
U myproj/bar.txt
U myproj/baz.c
U myproj/qux.c
Updated to revision 31.
Tip
You can just switch part of your working copy to a
branch if you don't want to switch your entire working
copy.
Sometimes an administrator might change the
“base location” of your repository—in
other words, the contents of the repository doesn't
change, but the main URL used to reach the root of the
repository does. For example, the hostname may change,
the URL scheme, or any part of the URL which leads to the
repository itself. Rather than checkout a new working
copy, you can have the
svn switch
command “rewrite” the beginnings of all the
URLs in your working copy. Use the
--relocate
option to do the substitution.
No file contents are changed, nor is the repository
contacted. It's similar to running a Perl script over
your working copy .svn/
directories
which runs
s/OldRoot/NewRoot/
.
$ svn checkout file:///tmp/repos test
A test/a
A test/b
…
$ mv repos newlocation
$ cd test/
$ svn update
svn: Unable to open an ra_local session to URL
svn: Unable to open repository 'file:///tmp/repos'
$ svn switch --relocate file:///tmp/repos file:///tmp/newlocation .
$ svn update
At revision 3.
Warning
Be careful when using the
--relocate
option. If you mistype the
argument, you might end up creating nonsensical URLs
within your working copy that render the whole workspace
unusable and tricky to fix. It's also important to
understand exactly when one should or shouldn't use
--relocate
. Here's the rule of
thumb:
-
If the working copy needs to reflect a
new directory
within
the
repository, then use just
svn
switch
.
-
If the working copy still reflects the
same repository directory, but the location of the
repository itself has changed, then use
svn
switch --relocate
.