具有“依赖关系”的 SVN 多个分支
Posted
技术标签:
【中文标题】具有“依赖关系”的 SVN 多个分支【英文标题】:SVN Multiple Branches with "Dependencies" 【发布时间】:2012-09-19 14:17:10 【问题描述】:我目前面临以下情况:
我有一个带有主干的 SVN 存储库,一些开发人员继续在其中添加代码(正如它应该做的那样)
然后我们有不同的分支(见图)p1_test(一个测试系统)和p1_live(一个生产系统)。
我们想要的程序是每 X 天从主干(进程 v¹)更新 p1_test 分支。 然后 p1_test 工作副本中的“真实文件”将被更新(v²)。
系统 p1_test 没有经过测试,每个错误修复都(或应该)提交到 p1_test 分支,并且 p1_test 系统更新(再次 v²)。 同时,其他未参与 p1-cycle 的开发人员将继续添加到主干。这些更改应该不集成到 p1_test 分支中(目前)。
最后(当 p1_test 被认为是稳定时,分支 p1_live 应该从 p1_test 分支更新,对 p1_test 所做的所有更改都应该重新集成到主干 (v³)。
在给定的时间点 v⁴ 被执行,这意味着 p1_live 的工作副本从 p1_live 分支更新。
即使一切都应该经过良好测试,我们也必须选择“热修复”p1_live 上出现的任何严重错误。在这种情况下,更改是直接对 p1_live 分支进行的,并且系统会从这个分支 (v⁵) 进行更新。
此过程必须与未知数量的 pX_test 和 pX_live 系统同时工作。
这甚至可以使用 svn 吗? 目前我面临很多不同版本号、冲突等问题。
是否有版本控制系统可以让我遵循给定的程序?
亲切的问候, 计时法
【问题讨论】:
【参考方案1】:我们将 Subversion 用于与您的使用模式相似的大型活动代码库。我们有标准的主干/分支/标签基础层次结构。在分支中,我们有 unstable
、testing
和 stable
。我们还有“用户”分支,在分支文件夹中每个用户名都有一个文件夹。标签正是它们应有的样子:不可触碰的快照。
trunk
branches/unstable
branches/testing
branches/stable
branches/userA/branch1
branches/userA/branch2
...
tags/stable/rNNNN
tags/stable/vN.N.N.N
...
根据我使用 Subversion 的所有经验,我发现它非常有效
如果代码只在一个方向流动会更好。例外是
从主干创建一个分支,当然可以合并
分支完成后变回主干(通常称为“重新集成”分支)。
如果代码不能沿一个方向流动,那么它必须至少保持在一个路径上。
这意味着一个分支的一个分支永远不应该直接重新集成回
例如后备箱。
我们的使用模式遵循所有积极的开发,包括错误修复,
总是首先进入主干,然后主干是更新提供者
对于不稳定、测试和稳定的分支。 (也可以
遵循trunk -> unstable -> testing -> stable
合并路径,但我们不这样做
由于我们的测试/发布过程的特定原因。)
如果您有针对特定分支的修复,则将其修复,并且不打算修复
将其合并回主干。我的经验发现这是一个很好的方法
不小心有一个无辜的分支更新中断代码,甚至从中删除代码
还没有提供给分支机构的主干。
您可能从我的观点中得知,Subversion 需要一个流程来真正按照您的意愿(我们也这样做)有效地使用它,并避免那些让您说“现在怎么办?”的奇怪冲突。关于 Subversion,您所描述和试图弄清楚的一切对我来说都太熟悉了。
我经常考虑围绕 DVCS 工具(如 Git 或 Mercurial)的炒作是否没有这些问题(完全??)是否值得花时间迁移我们的存储库(数百个)。唯一阻止我尝试的是时间限制,但您可能更适合尝试其中一种工具。
【讨论】:
【参考方案2】:嗯,我改成了 GIT。
感谢this wonderful blog post 我启动并运行了它。 (它完成了我需要它做的所有事情,甚至更多......)
【讨论】:
以上是关于具有“依赖关系”的 SVN 多个分支的主要内容,如果未能解决你的问题,请参考以下文章