本文档描述的是 Subversion 1.2。如果您正在运行更新版本的 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
选项执行替换。不会更改任何文件内容,也不会联系存储库。这类似于在工作副本 .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。