第 2 章 真理体系 真理体系
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
一个复杂而有效的系统总是从一个简单而有效的系统演变而来的。
约翰-盖尔(盖尔定律)
要建立有效的 DevOps 流水线,必须拥有 单一的真相系统,以了解哪些比特和字节被部署到生产中。通常,这要从源代码管理系统开始,该系统包含编译和构建到生产部署中的所有源代码。通过追溯生产部署到源代码控制中的特定修订,可以对错误、安全漏洞和性能问题进行根本原因分析。
源代码管理解决了软件交付生命周期中的几个关键问题:
- 协作
-
如果没有有效的源代码管理,在单一代码库 上工作的大型团队就会不断相互阻挠,随着团队规模的扩大而降低工作效率。
- 版本控制
-
源代码系统可让您跟踪代码的 版本,以确定哪些版本被部署到生产中或发布给客户。
- 历史
-
通过按时间顺序记录软件开发过程中的所有版本 ,就有可能恢复到旧版本的代码,或识别导致退步的具体变更。
- 归属
-
了解谁对 中的特定文件进行了修改,就可以在进行修改时确定所有权、评估领域专业知识和风险。
- 依赖关系
-
源代码已成为项目其他关键元数据(如对其他软件包的依赖性)的典型源 。
- 质量
-
源代码管理系统可以在修改被接受之前,方便地对修改进行 同行评审,从而提高软件的整体质量。
既然源代码管理在软件开发中扮演着如此关键的角色,那么了解它的工作原理并选择一个最能满足企业需求和理想 DevOps 工作流程的系统就显得尤为重要。
三代源代码管理
协作是软件开发的重要组成部分, ,随着团队规模的扩大,在共享代码库上进行有效协作的能力往往会成为制约开发人员工作效率的瓶颈。此外,系统的复杂性往往会增加,因此需要大规模更新以完成全系统变更和重构的源代码文件已不再是管理十几个文件或几个模块,而是数以千计。
为了满足代码库协作的需要,源代码管理 (SCM)系统应运而生。 第一代 SCM 系统通过文件锁定来处理协作 。例如 SCCS 和 RCS,它们要求在编辑前锁定文件,完成修改后再释放锁定,以便其他人员进行贡献。这似乎消除了两个开发人员进行冲突修改的可能性,但有两个主要缺点:
-
由于在编辑之前必须等待其他开发人员完成修改,因此工作效率仍然会受到影响。 在文件较大的系统中,这可能会有效地限制并发性,一次只能有一个开发人员。
-
但这并不能解决跨文件冲突的问题,两个开发人员仍有可能修改相互依赖的不同文件,并通过引入冲突的更改来制造错误或不稳定的系统。
从 Dick Grune 创建的并发版本系统(CVS)开始,第二代 版本控制系统做出了重大改进。CVS 在文件锁定(或不锁定)方面具有革命性的意义。 它不是阻止你修改文件,而是允许多个开发人员同时对同一文件进行修改(可能是冲突的)。 后来通过文件合并解决了这一问题:通过差异(diff)算法分析冲突文件,并将任何冲突的修改提交给用户解决。
通过将冲突变更的解决延迟到签入,CVS 允许多个开发人员自由修改和重构大型代码库,而不会因相同文件的其他变更而受阻。 这不仅提高了开发人员的工作效率,还可以对大型功能进行单独隔离和测试,之后再将其合并到集成代码库中。
目前最流行的第二代 SCM 是 Apache Subversion,它是作为 CVS 的直接替代品而设计的。与 CVS 相比,它有几个优点,包括将提交作为单个修订版进行跟踪,从而避免了文件更新碰撞,以免破坏 CVS 版本库状态。
第三代版本控制系统是 分布式版本控制系统(DVCS)。在 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access