本手册旨在描述 Subversion 1.6.x 系列。如果您运行的是其他版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅与您的 Subversion 版本相匹配的文档版本。

名称

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

概要

svn switch URL[@PEGREV] [PATH]

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

描述

此子命令的第一个变体(不带 --relocate 选项)会将您的工作副本更新为指向一个新的 URL — 通常是与您的工作副本具有共同祖先的 URL,但并非一定如此。这是一种使工作副本开始跟踪新分支的 Subversion 方式。如果指定了 PEGREV,则将在该修订版本中首次查找目标。请参阅 名为“遍历分支”的部分,以深入了解切换操作。

如果使用 --force,则工作副本中未版本化的阻碍路径在切换尝试添加同一路径时不会自动导致失败。如果阻碍路径与存储库中的对应路径类型相同(文件或目录),则它将成为版本化的,但其内容在工作副本中保持不变。这意味着阻碍目录的未版本化子项也可能会被阻碍并成为版本化的。对于文件,阻碍路径与存储库之间的任何内容差异将被视为工作副本的本地修改。存储库中的所有属性将应用于阻碍路径。

与大多数子命令一样,您可以使用 --depth 选项将切换操作的范围限制为特定的树深度。或者,您可以使用 --set-depth 选项在切换目标上设置新的 粘性 工作副本深度。

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

选项

--accept ACTION
--depth ARG
--diff3-cmd CMD
--force
--ignore-externals
--quiet (-q)
--relocate
--revision (-r) REV
--set-depth ARG

示例

如果您当前位于目录 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.
[Tip] 提示

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

有时,管理员可能会更改存储库的位置(或表观位置) — 换句话说,存储库的内容不会改变,但存储库的根 URL 会改变。例如,主机名可能会改变,URL 方案可能会改变,或者指向存储库本身的 URL 中的任何部分都可能会改变。您可以让 svn switch 命令 重写 工作副本的管理元数据以引用新的存储库位置,而不是检出新的工作副本。如果您使用 --relocate 选项与 svn switch 一起使用,Subversion 将联系存储库以验证重新定位请求(当然,会在新的 URL 中查找存储库),然后进行此元数据重写。这种类型的切换操作不会改变任何文件内容 — 这是对工作副本的仅限元数据的修改。

$ svn checkout file:///var/svn/repos test
A    test/a
A    test/b
…

$ mv /var/svn/repos /var/svn/newlocation

$ svn update test/
svn: Unable to open an ra_local session to URL
svn: Unable to open repository 'file:///var/svn/repos'

$ svn switch --relocate file:///var/svn/repos \
                        file:///var/svn/tmp/newlocation test/

$ svn update test/
At revision 3.
[Warning] 警告

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

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

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