如何重命名SVN分支并在现有沙盒中更新引用?

51

我需要重命名一个 SVN 分支,所以我执行了以下操作:

$ svn move https://server/repos/myrepo/branches/oldbranch \
    https://server/repos/myrepo/branches/newbranch

到目前为止,一切正常--该分支已被重命名。

问题在于,我们有现有的沙盒从这个分支签出,当我尝试更新时,会出现以下错误:

$ svn update
svn:目标路径 '/branches/oldbranch' 不存在

这是一个相当自我解释的错误。经过快速搜索,我认为我已经找到了解决方案:Relocating SVN working copy following branch rename

问题在于,当我尝试发出该命令时,我会收到另一个错误:

$ svn switch --relocate https://server/repos/myrepo/branches/oldbranch \
    https://server/repos/myrepo/branches/newbranch
svn:重新定位只能更改URL的存储库部分

就我所知,我正在像 Sander Rijken 一样使用 --relocate 命令。任何想法为什么我会得到这个错误?


我认为Sander Rijken的答案不正确。我已经在他的回答下添加了一条评论。 - Otherside
3个回答

58

只需这样做

svn switch https://server/repos/myrepo/branches/newbranch

从你的工作副本内部。


谢谢,这个方法可行,但是当我下一次执行svn update时,它会删除沙盒中的所有未版本化的文件...这正是我所希望避免的。 - Lee Netherton
2
在您的工作副本内部,您的意思是先使用“cd [oldbranch]”命令,然后从该目录中输入“svn switch [...]”命令吗? - Olivier Pons
1
我知道@OlivierPons的问题已经有7年了,但是由于没有人确认 - 为了未来的访问者,是的 - 你需要执行cd oldbranch然后执行svn switch ^/branches/newbranch(注意^告诉svn你正在相对于当前分支的根路径进行切换。) - DevDaddyNick

5

如果要更改相对路径,必须使用纯粹的 svn switch(而且不管怎样 switch --relocate 已经过时了),如 1-st form 中所写的那样,在 svn help switch 中。

switch URL[@PEGREV] [PATH] Update the working copy to mirror a new URL within the repository.

 This behavior is similar to 'svn update', and is the way to
 move a working copy to a branch or tag within the same repository.

比如,对于现在被改名为newbranch的旧分支oldbranch,你需要在WC根目录中使用以下命令:

svn switch ^/branches/newbranch


3

如果您只是想在Eclipse中重命名SVN分支,最简单的方法是进入“SVN仓库浏览透视图”,然后右键单击您的分支 -> 重构 -> 重命名


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接