### 名称 svn switch ― 把工作拷贝更新到别的URL。 ### 概要 ~~~ svn switch URL [PATH] ~~~ ~~~ switch --relocate FROM TO [PATH...] ~~~ ### 描述 这个子命令更新你的工作拷贝来反映新的URL―通常是一个与你的工作拷贝分享共同祖先的URL,尽管这不是必需的。这是Subversion移动工作拷贝到分支的方式。更深入的了解请见[“转换工作拷贝”一节]。 ### 别名 sw ### 变化 工作拷贝 ### 是否访问版本库 是 ### 选项 ~~~ --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**。