我被分配在Subversion中将几个分支合并回主干。目前,项目设置如下所示。
trunk
branches
BranchA
BranchB
BranchC
tags
// A bunch of tags (1 per release)
目标是将BranchA
和BranchB
集成到主干中,然后以某种方式“隐藏”它们。
我想我知道如何进行实际合并。右键单击Windows资源管理器中的 trunk ,然后TortoiseSVN > Merge...
然后Reintegrate a branch
,选择分支,然后合并。
问题1 - 这是正确的使用方法吗?
我也不确定在我这样做之后存储库会是什么样子。我们希望确保没有未来的开发人员错误地在旧分支上工作。
问题2 - 合并后分支是否不可行,或者我们是否需要做其他事情?你能“删除”一个分支吗?如果是这样,分支历史会发生什么?或者我们是否需要做一些hacky,比如对分支应用锁?
感谢您的帮助。
答案 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,它会在开发分支和 发布了新的次要/修复产品版本。
此处 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 因为开发部门尚未准备好投入生产。