svn switch
最后更新于:2022-04-02 05:58:43
### 名称
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**。
';