2013-02-07 64 views
1

我被分配到合并几个分支回Subversion的树干。目前,项目设置如下所示。擦除Subversion分支

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

的目标是整合BranchABranchB到主干,然后让他们“潜伏”不知何故。

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

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

我也不确定在执行此操作后存储库的外观。我们希望确保没有未来的开发者错误地在旧的分支上工作。

问题2分支合并后不能使用,还是需要做别的事情?你能“删除”一个分支吗?如果是这样,分行历史会发生什么?或者,我们是否需要做一些像锁一样分支的操作​​?

感谢您的任何帮助。

回答

2

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

是的,这将合并分支的内容到您的工作目录。直到您提交(新合并的)中继线之后,存储库中才会发生任何事情。一旦你提交了,不仅树干变化会在回购中,而且还会记住从分支中合并的东西。

问题2 - 分支合并后不可行,还是我们 需要做别的事情?

此时您可以删除分支,也可以不断更改分支。如果您不断修改分支并稍后进行另一次合并,则只有新的东西(而不是先前合并的东西)将合并到主干中。

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

+0

如果删除分支,您将如何查看/获取历史记录? –

+0

啊。当你打开回购浏览器时,你只需要改回到仍然有分支的版本。我想知道是否有办法看到所有存在的分支? –

+0

+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 

合并主干分支和合并回合并到主干是不是SVN的有效使用。为什么 - 阅读:

我不能回答你的问题2因为不知道你的真实要求 ...我建议阅读官方指南:

并建议使用功能功能开发叶和分支机构长期版本支持和标签对于版本。

而且不建议删除任何分支。为什么?因为除去SVN并不能使库小......只有让SVN LS输出短...

看看我的指南:


  • 每个主要版本都有自己的分支。
  • 另一个分支留给发展。
  • 最新的主要分支分支活跃。所有老的主要分支都是被动的。
  • 被动主要分支机构仅用于只有用于修复最新 来自此主要版本系列的代码(无新功能)。
  • 在开发分支中开发的功能。发布之前合并为主动发布分支 。
  • 修复了最早的主要版本分支中的错误,必须为其提供 并合并到所有下一个主要版本分支和开发分支。
  • 发布意味着分支机构和移动 产品构建释放系统完成开发的功能和bug修复..
  • 经过测试和稳定释放做。这意味着:

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

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

这里牛逼 - 标签,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.11.0.2与bug修复分支 ,因为开发分支尚未准备好投入生产。

+0

如果你想删除旧分支为什么不寻找Git/Mercurial集成到SVN? – gavenkoa