SVN如何从主干(trunk)切换到分支(branch)?

80

我在一个托管于SVN的项目的根文件夹中,正在探索设置两个分支。

其中一个分支将是当前(稳定)版本的项目“快照”,另一个分支将是我将要应用一些新代码、测试并升级主干到新版本的分支。

我的目标是保留这个快照作为保险和获取旧版稳定版本的快速方式。第二个分支,在我们应用了新代码并进行了测试后,将被合并回主干,我们向公众提供该版本。

为了设置快照,我将我们的trunk复制到一个名为v1p2p3的分支中:

$ svn cp https://www.example.com/svn/trunk \ 
         https://www.example.com/svn/branches/v1p2p3 \
         -m "Branching from root trunk to v1p2p3 at r1114"

目前为止,一切都很好:

Committed revision 1115.

我想要做的是将我的本地仓库副本切换到这个分支,以确保一切正常,但是我收到了一个错误消息:

$ svn switch --relocate https://www.example.com/svn/trunk \
                        https://www.example.com/svn/branches/v1p2p3

错误信息为:

svn: E155024: Invalid relocation destination: 
              'https://www.example.com/svn/branches/v1p2p3' 
              (does not point to target)

我哪里做错了?

(如果这样不行,我怀疑我不能开始着手于更有野心的第二个分支。我正在寻找一种方法来完成这个任务,而不会破坏现有的项目布局。感谢您的建议,如果这是一个愚蠢的问题,请谅解。)

3个回答

152

由于分支位于相同的存储库URL中,您无需进行--relocate。只需执行以下操作:

svn switch https://www.example.com/svn/branches/v1p2p3

谢谢你的快速帮助。我假设在切换到这个URL后的任何更改都不会影响“主干”,是吗? - Alex Reynolds
是的,当您的工作副本指向分支时,进一步提交将仅提交到该分支。您可以使用“svn info”检查提交的位置。 - tzaman

43
  • 对于最新的SVN版本,tzaman的正确答案的简短版本为:

    svn switch ^/branches/v1p2p3
    
  • --relocate开关已经被弃用了,在需要时您将不得不使用svn relocate命令

  • 您可以使用标签(传统只读标签)而不是创建快照分支(只读)来管理历史记录

在Windows上,插入符号(^)必须进行转义:

svn switch ^^/branches/v1p2p3

2
“快照作为保险和获取旧的、稳定版本的快速方式”听起来像是标签的经典用例,通常作为发布过程的一部分创建。建议标签+1。 - vilpan

3

在我的情况下,我想要检查最近被剪裁的一个新的分支,但是它很大并且我想节省时间和网络带宽,因为我在一个速度较慢的计量网络中。

所以我复制了我已经检入的上一个分支。

我进入了工作目录,通过svn info,我可以看到它在先前的分支上,然后我执行了以下命令(您可以从svn switch --help找到此命令)。

svn switch ^/branches/newBranchName

请再次执行svn info,您会看到它已经变成了新的分支名称,然后执行svn up 命令。

这就是我如何轻松快速地获取新分支,并且最小化数据传输的方法。

希望分享我的案例可以帮助并加快您的工作进度。


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