根据最新的调查数据,高达 93.87% 的开发者选择使用 Git 作为他们的代码版本控制系统。然而,令人惊讶的是,在2024年依然有少数知名公司并未采用 Git。据悉,Facebook 选择的是 Mercurial,而 Google 则青睐于Piper。那么,这些行业巨头为何选择不随大流,转而采用其他版本管理系统呢?这些系统又各自具备哪些独特之处呢?接下来,本文将深入探讨这些问题。
图片
Git 是一个分布式版本控制系统,用于跟踪代码的变化并协调多个开发人员在同一项目上的工作。Git 是由 Linus Torvalds 为了管理 Linux 内核开发而创建的,如今已经成为开源项目中最流行的版本控制系统,没有之一。
Facebook最初选择了Git,但在代码规模急剧增长后,他们开始遭遇Git性能方面的限制。特别是在执行类似"stat"的操作时,随着文件数量的增加,Git的性能开始变慢。尽管团队尝试联系Git项目的维护者以改进这些问题,但最终他们决定不再依赖Git,并转而选择了Mercurial,因为Mercurial的架构更加干净,且在面对大型monorepo时性能较好。Facebook也曾考虑过其他备选方案,比如闭源的Perforce和Bitkeeper,但最终选择了Mercurial,因为其性能与Git相当,而且有清晰的架构,易于扩展。
Mercurial 是一个分布式版本控制系统,用于跟踪项目的变化和管理文件的历史记录。它允许开发人员协作,跟踪代码更改,并管理源代码库的版本。Mercurial 提供了一种灵活的工作流程,能够适应不同团队和项目的需求。
图片
Mercurial 具有以下特点和优势:
Facebook选择Mercurial而不是Git的原因主要包括:
图片
总之,Facebook 选择 Mercurial 并非仅仅因为它比Git性能更好,而更多地是因为 Mercurial 的维护者和代码库更加愿意与Facebook合作,并且在工程团队中得到了有效的传播和沟通。
谷歌公司内部主要使用的是自行研发的版本管理工具 Piper 来管理代码,而不是Git。谷歌的 90% 以上的代码都存放在Piper中。对于那些开源的、需要外部协作的项目,如 Android 项目和 Chrome 项目,谷歌会选择使用 Git。
图片
Piper 与其他版本管理系统不同,它只有一个代码仓库。也就是说,Google 将所有代码都放在了一个代码仓库,整个公司使用不同语言编写的超过10亿文件,近百 TB 源代码都存放在自行开发的版本管理系统 Piper 中,只当项目开源且需要外部协作时,才会使用业界流行的 Git。
Piper 整个仓库采用树状结构,每个团队有自己的目录,目录路径就是代码的命名空间。每个目录都有负责人,负责批准该目录的文件变动。在权限控制方面,Piper支持文件级别的权限控制,大部分代码对所有用户可见,但重要的配置文件和机密的关键业务设有访问限制。
在工作流方面,开发者先创建文件的本地拷贝,这叫做“工作区”。完成开发后,工作区的快照会共享给其他开发者进行代码评审。只有通过评审的代码才能合并到中央仓库。谷歌采用“主干开发”的方式,代码一般提交到主干的头部,避免了合并分支时的麻烦。所有代码在合并进仓库之前,都必须进行代码评审,大部分评审对所有人开放,任何谷歌员工都可以对代码提意见或者提交变动。
那为什么 Google 使用 Piper,而不是使用 Git 呢?
说完了 Facebook 和 Google 使用的版本控制系统,最后再来简单了解一下使用率排在第二的版本控制系统——SVN。
SVN,全称 Subversion,是一个开放源代码的版本控制系统。它主要用于管理和跟踪文件和目录的变化,允许多个人在同一个项目上同时工作,并且可以追踪每个人的修改,以便在需要时进行版本回退或合并。
SVN的工作原理是将项目文件和版本历史存储在中央资料档案库中,这个档案库可以记录每一次文件的变动,因此用户可以把档案恢复到旧的版本或浏览文件的变动历史。SVN通过高效的分支管理系统实现多个人共同开发同一个项目,实现共享资源,并最终实现集中式的管理。
Git 的使用率比 SVN 多的原因主要有以下几点:
通常情况下,SVN 在以下情况下更适用:
Facebook选择Mercurial的原因主要是出于性能考量和合作与支持的考虑。随着代码规模的急剧增长,Facebook发现Git在大型单库操作上的性能存在限制。与此同时,Mercurial的维护者和社区更愿意与Facebook合作,提供了良好的支持和沟通渠道。这使得Facebook工程师们得到了必要的支持,并顺利完成了从Git到Mercurial的迁移。
而Google选择自行研发的Piper系统则是基于其特殊的代码库规模和安全性需求。Google的代码库规模庞大,包含数亿个文件和大量提交记录,这要求版本管理系统具备处理大规模代码库的能力。此外,Google还非常注重源代码的安全性,因此Piper系统在设计时考虑了安全功能,如文件级别的访问控制和日志记录等。
本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-83637-0.html2024 年了,Facebook、Google 竟然都不用 Git 管理代码?
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: 争论不休的一个话题:金额到底是用Long还是BigDecimal?
下一篇: 聊聊 RabbitMQ 中的死信队列