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

Posted

技术标签:

【中文标题】如何重命名 SVN 分支并更新现有沙箱中的引用?【英文标题】:How to rename an SVN branch and update references in an existing sandbox? 【发布时间】:2011-07-03 10:21:14 【问题描述】:

我需要重命名一个 SVN 分支,所以我这样做了:

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

到目前为止,一切都很好——分支已重命名。

问题是,我们已经从这个分支签出了现有的沙箱,当我尝试更新时,我得到了这个错误:

$ svn 更新
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: Relocate 只能更改 URL 的存储库部分

据我所知,我使用--relocate 命令的方式与 Sander Rijken 相同。任何想法为什么我会收到此错误?

【问题讨论】:

我不认为 Sander Rijken 的答案是正确的。我已经对他的回答添加了评论。 【参考方案1】:

做事

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

从您的工作副本中。

【讨论】:

谢谢,这行得通,但是当我接下来执行svn update 时,它确实会从沙箱中删除所有未版本控制的文件...我希望避免这样做。 From within your working copy => 你的意思是“cd [oldbranch]首先然后从那里输入命令svn switch [...]? 我知道@OlivierPons 的问题已经有 7 年历史了,但是由于没有人确认 - 为了这里的未来访客,是的 - 你会这样做 cd oldbranch 然后 svn switch ^/branches/newbranch (注意 ^ 告诉 svn您正在相对于当前分支的根路径进行切换。)【参考方案2】:

要更改相对路径,您必须使用 pure svn switch(无论如何switch --relocate 已弃用),如svn help switch 中所写的第一形式

switch URL[@PEGREV] [PATH] 更新工作副本以镜像存储库中的新 URL。

 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.

即在oldbranch的WC根目录中,现在是newbranch,你必须使用

svn switch ^/branches/newbranch

【讨论】:

【参考方案3】:

如果您只是想在 Eclipse 中重命名一个 SVN 分支,最简单的方法是进入 SVN Repository Exploring Perspective,然后右键单击您的分支 -> Refactor-> Rename

【讨论】:

以上是关于如何重命名 SVN 分支并更新现有沙箱中的引用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 cvs2svn 时,如何重命名符号以使分支和标记解析为相同的名称?

如何重命名文件并覆盖 VBS 中的现有文件?

在不停机的情况下重命名现有列

重命名主分支并创建一个新的空主

git合并重命名冲突

svn冲突在idea里怎么解决