当前位置:  开发笔记 > 开发工具 > 正文

svn:用branch替换trunk

如何解决《svn:用branch替换trunk》经验,为你挑选了4个好方法。

将subversion存储库的一个分支作为新主干的最佳方法是什么?

对整个系统进行了重大改写:事物已被移动,重写,替换,删除,重命名等.重写的代码已经过测试并准备替换旧的主干.

基本上,旧主线(Trunk 5)被标记并将在此处结束.重写的分支(分支6)将成为新的主线(Trunk 7):

Trunk(1) --> Trunk(2) --> Trunk(5) --> ×          +--> new Trunk(7)
  \                             \                 |
  fork                         merge             ???
    \                             \               |
     +--> Branch(3) --> Branch(4) --> Branch(6) --+

来自旧"主干"的所有持续变化已经包含在"重写分支"中

我怎样才能做到这一点?



1> Aaron Digull..:

使用svn move将旧主干的内容移动到其他位置,然后将分支重命名为trunk.

请注意,在svn中复制和移动的工作方式与文件操作类似.您可以使用它们在存储库中移动/复制内容,并且这些更改也会进行版本控制.将"移动"视为"复制+删除".

[编辑] Nilbus刚刚通知我你使用时会遇到合并冲突svn move.

我仍然认为这是正确的做法.它会引起冲突但如果你仔细合并,很可能你不会丢失任何数据.如果这困扰你,请使用更好的VCS,如Mercurial或Git.


@nilbus:在这一点上,我想引用Linus Torvalds:"Subversion的口号暂时是"CVS做得对",或类似的东西,如果你从那种口号开始,那么你无处可去去吧.没有办法做正确的CVS."
是的.我同意.为了解决这个问题,我实际上用svn-git检查了repo,并使用git将分支重新绑定到master上.

2> Ryan Cook..:

我同意使用svn move命令来实现这个目标.

我知道其他人认为这很不寻常,但我喜欢这样做.当我有一个功能分支并准备将它与一个也经过重大修改的主干合并时,我会将它合并到一个通常命名的新分支-Merged.然后我解决冲突并测试合并​​的代码.一旦完成,我将主干移动到tags文件夹,这样我就不会丢失任何东西.最后我把我搬到-Merged后备箱.

此外,我更喜欢在进行移动时避免使用工作副本,这里是命令的示例:

svn move https://SVNUrl/svn/Repo/trunk https://SVNUrl/svn/Repo/tags/AnyName

svn move https://SVNUrl/svn/Repo/branches/BranchName-Merged https://SVNUrl/svn/Repo/trunk

注意:我使用1.5



3> 小智..:

我最近只是在看这个问题,我非常满意的解决方案就是表现

svn merge --ignore-ancestry trunk-url branch-url

在我的行李箱的工作副本上.

这不会尝试以历史方式应用更改(维护主干中的更改).它只是在主干和分支之间"应用差异".这不会在未修改的文件中为您的用户创建任何冲突.但是,您将从分支中丢失您的历史信息,但无论如何您执行合并时都会发生这种情况.



4> Chris Nava..:

建议您通过存储库浏览器工具进行这些更改.

通过工作副本尝试大型删除+移动操作是杀死工作副本的好方法.如果您被迫使用工作副本,请在每次删除或移动操作后执行增量提交,并在每次提交后更新工作副本.


抱歉.拼写使它看起来像我指的是一个特定的工具(已编辑).实际上,大多数SVN GUI工具都应该具有存储库浏览器功能.仅供参考:我使用的是陆龟http://tortoisesvn.tigris.org/
推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有