擦除Subversion分支

时间:2013-02-07 17:57:32

标签: svn merge tortoisesvn branch

我被分配在Subversion中将几个分支合并回主干。目前,项目设置如下所示。

trunk
branches
    BranchA
    BranchB
    BranchC
tags
    // A bunch of tags (1 per release)

目标是将BranchABranchB集成到主干中,然后以某种方式“隐藏”它们。

我想我知道如何进行实际合并。右键单击Windows资源管理器中的 trunk ,然后TortoiseSVN > Merge...然后Reintegrate a branch,选择分支,然后合并。

问题1 - 这是正确的使用方法吗?

我也不确定在我这样做之后存储库会是什么样子。我们希望确保没有未来的开发人员错误地在旧分支上工作。

问题2 - 合并后分支是否不可行,或者我们是否需要做其他事情?你能“删除”一个分支吗?如果是这样,分支历史会发生什么?或者我们是否需要做一些hacky,比如对分支应用锁?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

  

问题1 - 这是正确的使用方法吗?

是的,这会将分支的内容合并到您的工作目录中。在提交(新合并的)主干之前,存储库不会发生任何事情。一旦你提交,主干不仅会更改在回购中,而且会记住从分支中合并的内容。

  

问题2 - 合并后分支机构是不可行的,还是我们会   需要做点什么吗?

此时您可以删除分支,也可以继续对分支进行更改。如果你继续对分支进行更改,然后再进行另一次合并,那么只有新的东西(不是以前合并过的东西)才会被合并到主干中。

如果您确实要删除分支,我发现最简单的方法是打开repo浏览器,右键单击分支并选择“删除”。分支将从最新版本中消失。它仍然会在回购历史中,如果有必要,你可以把它带回去,但是有人在做新的结账时不会看到它。

答案 1 :(得分:1)

从命令行(回答问题1):

$ cd $DEVROOT/trunk

$ svn merge http://company.org/svn/proj/branches/BranchA
....
$ svn ci -m 'Merged BranchA'
$ cd rm -m 'BranchB already merged' http://company.org/svn/proj/branches/BranchA

$ svn merge http://company.org/svn/proj/branches/BranchB
....
$ svn ci -m 'Merged BranchB'
$ cd rm -m 'BranchB already merged' http://company.org/svn/proj/branches/BranchB

将trunk合并到分支并将merge merge合并到trunk是无效的SVN用法。为什么 - 阅读:

由于不了解您的真实要求,我无法回答您的问题2 ...我建议阅读官方指南:

并建议使用功能 leaf进行功能开发,分支 leaf用于长期版本支持,标记用于发布。

并且不建议删除任何分支。为什么?因为在SVN中删除不会使存储库变小......只能使 svn ls 输出更短......

请向我的导游说明:


  • 每个主要版本都有拥有分支。
  • 保留用于开发的另一个分支。
  • 最新的主要重新分支活跃。所有较旧的主要分支都是被动的。
  • 被动主要分支仅用于 用于最新的小错误修复 这个主要版本系列的代码(没有新功能)。
  • 开发分支开发的功能。在发布之前合并为活动 主要发行部门。
  • Bug已在最旧的主要版本分支中修复,必须为其提供 并合并到所有下一个主要版本分支和开发分支。
  • 发布意味着完成开发功能集和分支上的错误修复 将产品构建移动到发布服务器..
  • 测试并稳定释放后。这意味着:

    • VERSION文件已更新。
    • CHANGE文件中填充了功能集,版本,数据和VCS修订版 号。
    • 在VCS中按标记标记。
    • 调用由标记标记的源的构建。将结果复制到发布服务器。
  • 如果在某个版本中发现了bug,它会在开发分支和 发布了新的次要/修复产品版本。

  • 不支持以前的主要/次要版本(仅使用最新版本)。 用户总是被迫更新到最新版本。

此处 t - 标签, b - 分支机构:


  +--+-----+----------------------+-----+----+------+------+----->
  dev|     |            ^     ^   |     |    |      |      |
     |     |            |     |   |     |    v      v      v
     |     |            |     |   |     |    +--+------+------+-->
     |     |            |     |   |     |    b2 |      |      |
     |     |            |     |   |     |       v      v      v
     |     |            |     |   |     |      t2.0.0 t2.0.1 t2.1.0
     v     v            |     |   v     v
    t0.1.0 +---+------+-+---+-+-----+------+------+------+------+--->
           b1  |      |     |       |      |      |      |      |
               v      v     v       v      v      v      v      v
              t1.0.0 t1.0.1 t1.0.2 t1.1.0 t1.2.0 t1.2.1 t1.2.2 t1.2.3

在此示例中,我们发布了标签 1.0.1 1.0.2 ,并在分支中修复了错误 1 因为开发部门尚未准备好投入生产。