Subversion是一种集中式的版本控制系统,一般被简称为SVN。作为目前可用的众多版本控制选项之一,SVN依旧存在着分支功能弱、集中式导致服务器压力大等问题。
如果您的需求已经超过SVN所提供的功能范围应该怎么办?龙智将在系列文章中为您提供其他版本控制软件的实践参考。我们将从为什么使用SVN、命令备忘录清单、托管储存库、如何使用客户端等角度对比Perforce Helix Core、SVN与Git,让您能够深入了解各个版本控制软件的优缺点。(已发布文章可在文末【往期推荐】中阅读。)
作为DevSecOps研发安全运营一体化解决方案供应商,龙智持续关注版本控制领域动态与发展,为您提高最新洞察与最佳实践参考,帮助大型开发团队更好地进行数字资产管理与协作。
分支和合并是开发的主要内容。但是,SVN繁琐的分支和复杂的合并模型一直备受用户诟病。本文将从SVN的分支与合并工作原理来分析,并给出解决问题的办法。
首先,我们将介绍Subversion的分支工作方式,以及如何使用SVN合并。
Subversion分支策略
Subversion分支(SVN分支)允许您的团队同时处理多个版本的代码,开发人员可以测试新功能,不会因错误和bug影响其他开发工作。
SVN的“分支(branch)”目录与“主干(trunk)”目录并行运行。SVN分支可以复制主干,并允许您对其进行更改。当新功能稳定时,分支会重新合并。
以下是SVN分支和合并的基本分步概述:
- 使用svn copy命令创建分支。
- 使用svn checkout签出新的工作副本。
- 使用同步合并可使分支在工作时保持最新。
- 使用svn merge将更改发送回主干。
SVN分支和SVN合并的缺点
用户对SVN诟病最多的是其繁琐的分支和复杂的合并模型。SVN分支作为储存库中的目录创建,这种目录结构是SVN分支的核心难点。它占用了开发人员大量的精力。
Subversion分支之间的关系
分支之间的关系以及分支与主干的关系都不易存储在SVN中。开发人员必须提出命名方案或创建外部文档。
并行开发中的SVN合并
在您在处理分支时,偶尔会从主干合并到分支,以保持目录最新。每次发生这种情况时,都会将更改复制到分支目录中。这可能会也可能不会反映其他开发人员正在进行的更改。
当分支准备就绪后,使用SVN合并提交回主干。当然,您不是唯一一个进行合并更改的人。您的主干版本可能不会反映开发人员的分支。这意味着冲突、丢失的文件和混乱的更改困扰着您的分支。
让我们仔细看一下这个例子:
1.0主干有两个开发人员在不同的版本上工作。随着1.4和2.0开发分支的开发,它们将从主干合并到开发分支以收集更新。
并行SVN开发对其他分支造成了有限的可见性。当1.4开发分支与主干合并时,它被推送到开发中。这可能是把冲突降到最低的情况,但对于2.0开发分支就不一样了。
SVN树冲突
长期存在的分支出现问题的风险会更大。SVN不会告诉您分支在主干上的位置。您必须对代码进行梳理,找出它所在的位置以及缺少哪些更改。
当更改目录结构时,通常会发生SVN树冲突,重命名或删除文件时可能会发生这种情况。由于这些更改很常见,您需要花点时间来搜索。
由于在发生树冲突时无法提交更改,您必须手动解决每个错误。即使使用“合并跟踪”,您也可能无法找出分支中缺少了哪些更改。这可能会严重延迟部署。此外,随着团队规模的扩大,主干可能会变得不够稳定,导致其更加难以维护。
如何解决SVN合并冲突和分支问题
很明显,SVN分支和合并是个问题。Perforce Helix Core提供了一种强大而简单的分支方法:Perforce Stream。
开发人员可以使用任务流来处理项目的一小部分,而不会影响生产或其他开发人员。工作流定义了每个分支的目的:主线、开发、任务或发布。它们遵循主线模型,所有更改都流向主线,类似于SVN主干。它让开发人员专注于自己的代码,而不是分支和合并。
分支层次结构的图形表示由工作流程图创建,这意味着您的团队始终知道每个人在做什么。
此外,Streams的独占签出和颗粒度的权限设置让一切都清晰可见。这种流式传输策略解决了SVN分支的许多问题。在Perforce Helix Core中,没有固定的命名方案。Perforce Helix Core使用一个单独的数据库表来跟踪每次合并。还有许多方法可以跨分支跟踪更改:修订历史记录、延时视图和修订图。
文章来源:https://bit.ly/3AGWwtP