1

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

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

目标是整合BranchABranchB返回到后备箱中,然后以某种方式将它们“隐藏”起来。

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

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

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

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

谢谢你的帮助。

4

2 回答 2

2

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

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

问题 2 - 合并后分支是否无法使用,还是我们需要做其他事情?

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

如果您确实想删除分支,我发现最简单的方法是打开 repo 浏览器,右键单击分支并选择“删除”。该分支将从最新版本中消失。它仍将保留在回购历史记录中,如有必要,您可以将其带回,但进行新结帐的人将看不到它。

于 2013-02-07T19:38:07.203 回答
1

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

$ cd $DEVROOT/主干

$ svn 合并 http://company.org/svn/proj/branches/BranchA
……
$ svn ci -m '合并的分支A'
$ cd rm -m 'BranchB 已经合并' http://company.org/svn/proj/branches/BranchA

$ svn 合并 http://company.org/svn/proj/branches/BranchB
……
$ svn ci -m '合并的BranchB'
$ cd rm -m 'BranchB 已经合并' http://company.org/svn/proj/branches/BranchB

将主干合并到分支并重新合并到主干不是 SVN 的有效用法。为什么 - 阅读:

我无法回答您的问题2,因为不知道您的实际要求...我建议阅读官方指南:

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

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

看我的指南:


  • 每个主要版本都有自己的分支。
  • 为开发保留的另一个分支。
  • 最新的主要版本分支处于活动状态。所有较旧的主要分支都是被动的。
  • 被动主要分支仅用于此主要版本系列中最新代码的小错误修复(无新功能)。
  • 在开发分支中开发的功能。在合并到活动的主要发布分支之前发布。
  • 错误已在最旧的主要版本分支中修复,必须为其提供并合并到所有下一个主要版本分支和开发分支。
  • 发布意味着完成在分支上开发一组功能和错误修复并将产品构建移动到发布服务器。
  • 经过测试和稳定发布。这表示:

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

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

这里t - 标签,b - 分支:

  +--+-----+----------+-----+----+------ +--------+----->
  开发| | ^ ^ | | | | |
     | | | | | | vvv
     | | | | | | +--+------+------+-->
     | | | | | | b2 | | |
     | | | | | | vvv
     | | | | | | t2.0.0 t2.0.1 t2.1.0
     vv | | vv
    t0.1.0 +---+------+-+---+-+-----+------+------+------+ ------+--->
           b1 | | | | | | | |
               vvvvvvv
              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.11.0.2 ,并在分支1中修复了错误, 因为开发分支还没有准备好投入生产。

于 2013-02-07T19:22:23.600 回答