本手册编写用于描述 Subversion 1.4。如果您使用的是更新版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的书籍。

名称

svn switch — 将工作副本更新到不同的 URL。

概要

svn switch URL [PATH]
switch --relocate FROM TO [PATH...]

描述

此子命令的第一个变体(没有 --relocate 选项)将更新您的工作副本以指向新的 URL——通常是一个与您的工作副本共享共同祖先的 URL,但并非一定如此。这是 Subversion 将工作副本移至新分支的方式。请参阅 名为“遍历分支”的部分,以深入了解切换。

--relocate 选项会导致 svn switch 做一些不同的事情:它将更新您的工作副本以指向 相同的 存储库目录,只是在不同的 URL 上(通常是因为管理员已将存储库移至另一台服务器或同一服务器上的另一个 URL)。

其他名称

sw

更改

工作副本

访问存储库

选项

--revision (-r) REV
--non-recursive (-N)
--quiet (-q)
--diff3-cmd CMD
--relocate FROM TO
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

示例

如果您当前位于目录 vendors 中,该目录已分支到 vendors-with-fix,并且您想将工作副本切换到该分支

$ svn switch http://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.

要切换回来,只需提供您最初检出工作副本的存储库中位置的 URL

$ svn switch http://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.

提示

如果您不想切换整个工作副本,只需将工作副本的一部分切换到分支即可。

有时,管理员可能会更改存储库的“基本位置”——换句话说,存储库的内容不会改变,但用于访问存储库根目录的主要 URL 会改变。例如,主机名可能会改变,URL 方案可能会改变,或者任何导致存储库本身的 URL 部分可能会改变。您不必检出新的工作副本,而是可以使用 svn switch 命令“重写”工作副本中所有 URL 的开头。使用 --relocate 选项执行替换。不会更改任何文件内容,也不会联系存储库。这类似于在工作副本 .svn/ 目录上运行一个 Perl 脚本,该脚本运行 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.

警告

使用 --relocate 选项时要小心。如果您输入错误的参数,您可能会在工作副本中创建无意义的 URL,从而导致整个工作区无法使用且难以修复。了解何时应该或不应该使用 --relocate 也很重要。以下是一条经验法则

  • 如果工作副本需要反映存储库中 内部 的新目录,则只需使用 svn switch.

  • 如果工作副本仍然反映相同的存储库目录,但存储库本身的位置已更改,则使用 svn switch --relocate.