svn:用branch替换trunk

Jac*_*cco 151 svn version-control

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

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

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

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

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

我怎样才能做到这一点?

Aar*_*lla 117

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

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

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

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

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

Rya*_*ook 66

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

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

注意:我使用1.5

  • 这可能不是最佳实践,但当您有一个非常旧的主干并且每个人都在一个分支上工作时,它肯定是最有效的,就好像它是主干一样。它解决了我的问题! (2认同)

小智 12

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

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

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

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


Chr*_*ava 9

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

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

  • 抱歉.拼写使它看起来像我指的是一个特定的工具(已编辑).实际上,大多数SVN GUI工具都应该具有存储库浏览器功能.仅供参考:我使用的是陆龟http://tortoisesvn.tigris.org/ (3认同)

小智 5

如果您想让分支成为新的主干(即)删除自创建分支以来主干中所做的所有更改,您可以 1. 创建主干的分支(用于备份目的) 2. “恢复更改” ” 在主干上(选择创建分支后的所有修订版本 3. 将分支合并回主干。

历史就应该如此。

问候,罗杰