名称
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。