在过去的几年中,版本控制(实际上已成为嵌入式软件开发过程的一部分)已发生了很大变化。这对任何组织审查其版本控制策略并在版本控制工具上进行投资都具有重大意义。
最大的发展之一是Git的流行,Git是最初在Linux世界中开发的开源版本控制系统,但现在已被广泛使用。Pure Git专为独立工作和分布式本地化版本而设计,没有中央服务器功能。Git的吸引力之所以可以理解是因为它为个人开发人员提供了一些引人注目的好处–价格便宜,设置迅速,并为个人或中小型团队提供了所需的快速,灵活的版本控制和工作流程。
尽管许多传统的嵌入式软件开发人员可能并不欢迎Git,但大学毕业的新一代工程师是–以及诸如Agile之类的新开发方法。
Git确实有一些限制,但是可以在一定程度上克服这些限制。稍后再详细介绍,但首先,GitHub应该得到解释,因为它经常在与Git相同的对话中被引用。Git是一个版本控制工具,而GitHub是Git管理工具,它为用户提供了一个通用的位置来存储所有已创建的Git存储库,从理论上讲,它使管理起来更加容易。GitHub负责推广Git,但它当然不是唯一的Git管理工具,其他工具各有不同的功能和方法。
并行开发
在Git兴起的同时,软件开发的本质也发生了变化。项目变得越来越大,越来越复杂,通常涉及分散在世界各地的更大的团队。用户不仅希望对源代码进行版本控制,还常常希望包含二进制文件,以将与项目关联的所有内容都放在一个位置。物联网进一步加速了这一过程。如今,即使在小型组织中,千兆位存储库也已司空见惯,这给公司施加了压力,要求它们确保数字IP安全,可访问和可审计,同时又不减慢开发过程。此外,我们还更加关注数字资产的整个生命周期,而不仅仅是其最初的开发。这些驱动因素意味着Git的角色需要仔细考虑。
安全性
物联网有使我们退缩到30年前的时间,因为我们在构建网络堆栈时没有采取固有的安全措施,因此有遭受大规模DDOS攻击的风险。围绕安全性,各种软件开发都需要更加严格和尽职调查;不仅要满足合规性和法规要求,还要满足安全性要求。Git的体系结构不包括经过验证的历史记录之外的安全性(无身份验证,无权限);但这并不是批评,因为它并非旨在作为安全工具。
Git管理可用于引入安全性,但是安全性的性质和级别会有所不同。有些工具提供了在存储库级别上对文件的访问,因此安全性是一无所有:用户可以访问存储库中的所有文件,或者根本不能访问。其他工具在存储库和分支级别提供访问控制。更高级的工具可提供更细粒度的安全性。例如,Perforce Helix提供了跨IP地址,用户和组的访问控制(以及试图访问的任何人的可见性),并且在本地或授权位置的代码存储库,分支,目录或单个文件级别具有可执行性。
大规模开发
Git对于许多较小的项目和团队来说是不错的选择,但是当项目增长时,它很快就变得毫无用处。这是由于它的体系结构:一个Git存储库在内部组织成一棵树,其中每个节点代表对一组文件的更改,并通过散列对其之前的更改进行加密保护。每个存储库都需要提供其整个历史记录,因此,在大型项目中,下载(“克隆”)存储库可能会从几秒钟缩短到几分钟甚至几小时。
缩小项目规模不是一个选择:用户会被最初指定的Git存储库配置所困扰;它无法拆分。拥有大量存储库是一些组织尝试的一种方法,但是正如他们发现的那样,管理数百个Git存储库非常困难-因此,术语“ Git蔓延”。不再有整个项目的单一视图。虽然可以将所有这些存储库重新“缝合”在一起,但这会带来很多额外的工作。在广泛采用Git的组织中,雇用团队来管理Git并不少见,因此使Git变得可行所需的进一步投资可能会抵消Git最初的低成本。
Git管理工具会有所帮助,因为它们可以在很大程度上添加方法,以使Git在大型环境中更易于管理。例如,Perforce Helix使用户可以灵活地将项目回顾性地分成较小的块。事实证明,Git管理工具非常流行,并且确实可以解决一些实际问题。同样,尽管很难向开发人员强制要求他们不能使用Git,但许多知道无法避免复杂的大规模开发环境的组织选择尽可能避免使用Git。
“ Git对于许多较小的项目和团队来说很好,但是当项目增长时,它很快变得毫无用处。” 斯文·埃里克·诺普(Sven Erik Knop)
“单一事实来源”
在嵌入式开发中,组织通常希望将与项目相关的所有内容都包含为“单一事实来源”,所有数字资产都集中在一个地方,完全可追溯且可见。它日益被视为DevOps的基本要求,并通过提供项目的单一,不变的历史记录来支持合规性流程。
在嵌入式市场中,开发环境通常包括各种各样的二进制文件,这些文件通常很大且格式不同。问题在于二进制文件在Git中不容易版本化-即使使用GitLFS也会导致大量资产更新-因此公司最终可能会在其他系统中存储二进制资产,从而破坏了“单一事实来源”。此外,项目可能包括软件开发团队之外的人员,他们认为Git不易于使用。
混合解决方案
虽然Git不会很快消失,但是与复杂的大型开发项目相关的问题也不会消失。有多种选择,包括同时支持Git和其他版本控制环境(例如Perforce Helix),分布式和集中式版本控制的混合系统。诸如“狭窄克隆”之类的技术还可以通过将无用的源代码分成较小的块来提供帮助,但是,这又是组织必须在工作量和预算中考虑的额外工作。
总体信息是:Git提供了很多功能,并且在将版本控制带给新用户方面发挥了巨大作用。但是,当项目开始扩展或变得更加复杂时,尤其是在成本,安全性,速度和灵活性方面,其企业级部署需要仔细考虑和管理。幸运的是,实现这一目标的方法越来越多,而且这些方法还将继续发展,从而为公司提供更多选择。