本手册描述的是 Subversion 1.1 版本。如果你使用的是更新版本的 Subversion,我们强烈建议你访问 https://svnbooks.subversion.org.cn/ 并查阅适合你 Subversion 版本的书籍。
svn switch — 将工作副本更新到不同的 URL。
此子命令会更新你的工作副本以镜像一个新的 URL——通常是一个与你的工作副本有共同祖先的 URL,但也不一定。这是 Subversion 将工作副本移动到新分支的方法。查看 名为“切换工作副本”的部分 以深入了解切换。
--revision (-r) REV --non-recursive (-N) --quiet (-q) --diff3-cmd CMD --relocate --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选项来执行替换。不会更改任何文件内容,也不会联系仓库。这类似于在你的工作副本上运行一个 Perl 脚本.svn/目录,该脚本会运行 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。