svn switch

Posted on Posted in 1.svn

名称

svn switch              — 把工作拷贝更新到别的URL。

概要

svn switch URL [PATH]

           

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

                     

描述

这个子命令(没有--relocate选项)更新你的工作拷贝来反映新的URL—通常是一个与你的工作拷贝分享共同祖先的URL,尽管这不是必需的。这是Subversion移动工作拷贝到分支的方式。更深入的了解请见“使用分支”一节

--relocate选项导致svn switch做不同的事情:它更新你的工作拷贝指向到同一个版本库目录,但是不同的URL(通常因为管理员将版本库转移了服务器,或到了同一个服务器的另一个URL)。

别名

sw

改变

工作拷贝2

是否访问版本库

选项

--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