我目前面临以下情况:
我有一个带有主干的 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吗?
目前我面临着很多不同的修订号、冲突等问题。
是否有版本控制系统可以让我遵循给定的程序?
亲切的问候,
时间把戏
最佳答案
我们将 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
...
如果代码流入 会更好仅一个方向 .异常(exception)是
从主干创建一个分支,当然可以合并
一旦分支完成,就会变回主干(通常称为“重新整合”一个分支)。
这意味着一个分支的一个分支永远不应该直接重新整合回
行李箱,例如。
总是先进入主干,然后主干是更新提供者
对于不稳定、测试和稳定的分支。 (也可以
关注
trunk -> unstable -> testing -> stable
合并路径,但我们不由于特定于我们的测试/发布过程的原因。)
将其合并回主干。我的经验发现这是一个很好的方法
意外地有一个无辜的分支更新中断代码,甚至从中删除代码
尚未提供给分支的主干。
您可能会从我的观点中了解到,Subversion 需要一个过程才能真正按照您的意愿(我们也是这样做的)有效地使用它,并避免那些让您说“现在怎么办?”的奇怪冲突。关于 Subversion,你所描述和试图弄清楚的一切对我来说都太熟悉了。
我经常考虑围绕像 Git 或 Mercurial 这样的 DVCS 工具的炒作(根本没有这些问题??)是否值得花时间迁移我们的存储库(数百个)。唯一阻止我尝试的是时间限制,但您可能更适合尝试其中一种工具。
关于带有 "Dependencies"的 SVN 多个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12496662/