当前位置: 首页 > 科技观察

你想知道像MicrosoftEdge这样的巨型项目是如何进行版本控制的吗?

时间:2023-03-13 09:21:44 科技观察

本文转载自微信公众号“郭琳”,作者郭琳。转载本文请联系郭琳公众号。不知道大家有没有好奇过MicrosoftEdge这样的巨型项目是如何进行版本管理的呢?当然,这个问题我需要先说明一下,因为很多人可能没有Edge这个项目有多大的概念。其实我也不知道,因为我知道我接触过的只是冰山一角。可能大多数人看这个项目的代码就像是在用管子偷窥一样。Edge是微软基于Chromium内核开发的浏览器,Chromium是谷歌推出的开源浏览器项目。那么Chromium有多大?遗憾的是,我没有找到最新的数据,但是根据2019年的数据,Chromium项目的代码总行数已经达到3400万多行,纯代码行数(去除注释和空白)行)也有超过2500万行。毫无疑问,这简直就是一艘航空母舰,所以相信没有人能说对这个项目有完整的了解。而且Edge会比Chromium越来越大,因为微软会在Chromium之上添加很多自己的功能。那么再次回到最初的问题,你有没有想过像Edge这样的巨型项目是如何进行版本管理的?今天我们就来揭秘。首先要说明的是,我接下来要说明的Edge版本管理和发布规则并不是微软发明的,而是遵循与GoogleChrome一模一样的规则(毕竟是基于Chromium内核的项目),所以它不涉及任何微软内部机密。我觉得这套规则还是比较科学和成熟的。我敢肯定,除了Edge和Chrome之外,肯定还有大量使用类似规则的成熟项目。对于一些还没有形成自己规则的小项目,我觉得现在正是学习本文介绍的内容的好时机,让你的版本管理变得更加科学。首先介绍一下Chromium内核版本号的概念。比较关注浏览器的朋友可能或多或少听说过,比如Chrome80的发布,Chrome90的发布,后者的版本号对应的是Chromium内核的版本号。国内很多浏览器也是基于Chromium内核开发的,有时在做广告的时候会加上Chromium内核版本号的说明。比如QQ浏览器就是基于Chromium70内核开发的。360SafeBrowser基于Chromium86内核开发。那么内核版本号是按照什么样的规则升级的呢?其实很简单。根据Chromium的规定,内核版本号每6周升级一次。内核版本号每4周更新一次,但因为是以后,每篇文章还是每6周解释一次)。也就是说,如果最新的Chromium内核版本号是90,6周后就会变成91,以此类推。在这6周内,无数的代码将被提交到Chromium的主线代码仓库,而这些代码变更将成为Chromium90和91内核之间的所有功能差异。考虑到这一点,让我们回到Edge。目前我的团队是微软的EdgeAndroid团队,EdgeAndroid版本只有一个官方渠道:GooglePlay。(虽然在国内一些手机应用商店也可以下载Edge,但是这些商店的某些版本可能是从其他地方抓取的,有的没有及时更新)如果你尝试在GooglePlay中搜索Edge,你会发现在事实上,Edge不仅有一个版本,还有四个。这可能会让一些新手用户感到困惑。我不知道用哪个来处理这么多版本。是啊,直接上架稳定版不就好了吗?为什么会有Canary、Dev和Beta版本?这是因为每个版本都有自己不同的功能,四个版本的组合可以使整个项目更加稳定和健壮。下面我将一一介绍这四个版本的作用和意义。MicrosoftEdgeCanaryCanary的意思是金丝雀。这个词在软件开发行业很常见,但真正理解它含义的人却不多。早期这个术语用于采矿领域。矿工们会带一只金丝雀进矿场进行挖矿。由于金丝雀对各种有害气体敏感,在人类检测到有害气体之前,金丝雀就会死亡,以便矿工及时发现有害气体。气,尽快做好防护。在软件行业,金丝雀也有同样的含义。它的主要作用是让我们能够在很早的阶段就发现软件中的问题。如果您选择成为EdgeCanary的用户,您将能够第一时间体验到Edge新增的最新功能。因为金丝雀的发布频率是每天发布一个版本。也就是说,我今天写的一个功能,明天就可以在EdgeCanary中使用了。当然,除了体验新功能,你还会遇到很多新的BUG。因为,正如我之前所说,Canary旨在尽早发现问题,所以它非常不稳定。如果有任何功能缺失或崩溃,请不要感到惊讶,我们也会根据用户检测到的各种问题及时修复。但是,这个版本发布频率可能并不适用于每个项目。如果是一些比较小的项目,一天的代码改动可能不会太多。在这种情况下,每天发布一个版本意义不大。在Edge中,每天都有大量代码进入主线代码库。当前的Edge在所有平台上共享同一组代码库。每天都会有PC端的代码更新,也会有移动端的代码更新,也会有Chromium拉取的代码更新。因此,金丝雀版本每天都会有很多差异。虽然具体的区别我们不知道(毕竟每个人只对自己的一小部分负责),但是有实力的网友总能找出来帮忙提个问题。这也是金丝雀版本最大的意义所在。MicrosoftEdgeDevEdgeDev和EdgeCanary其实有些相似。顾名思义,其目的也是为了让用户在早期开发阶段体验到Edge的最新功能。但Dev版本并不像Canary版本那样激进。它不是每天发布一个版本,而是每周发布一个版本。是的,它们之间只有这么多区别。但是别看只是发布频率的不同,它们针对的用户群体是完全不同的。金丝雀版面向发烧级用户,他们愿意每天更新一个可能变化不大的版本,只是为了第一时间体验Edge团队前一天开发的新功能。Dev版本针对的是较为保守的用户群。他们每天更新一次太频繁了(我个人不喜欢更新非常频繁的应用程序)。每周更新一次,体验本周Edge的全面介绍。一项新功能,正好适合他们。此外,Dev版本会比Canary版本稳定很多。如果你是金丝雀版本的用户,今天还可以正常使用浏览器,但是明天会更新一个新版本,可能会出现启动卡顿的情况。这样的情况在Dev版出现的概率会大大降低,因为它一周只会发布一个版本,而在Canary版遇到的问题大概率会在Dev版修复,所以相对来说,你可以比较随意更新Dev版本。综上所述,Dev版更适合既想体验新功能,又希望版本更稳定的用户。如果只看MicrosoftEdgeBeta的更新频率,EdgeBeta和EdgeDev的更新频率几乎是一样的,Beta版也是每周发布一次。但是,Beta版和Dev版的作用是完全不同的。在软件行业中,Beta通常表示即将发布。主要功能已经稳定,不会有大的变化。EdgeBeta也是这个意思。刚才说了,Dev版本会每周更新一次。经过6周的迭代,这个Dev版本将转化为Beta版本。那么Beta版继承了Dev版的内核版本号,Dev版的内核版本号加1。比如Edge是基于Chromium90内核开发新功能,经过6周的开发,这个版本会变成Beta版本,所以Edge会发布一个基于Chromium90的Beta版本,开发中代码的主线内核会变成Chromium91。这样的话,Canary和Dev版本的用户很快就可以体验基于Chromium91内核的版本,而Beta版的用户刚刚使用了基于Chromium90的版本。Beta版的发布意味着本次开发周期的所有功能已经完成,接下来的使命就是把这些功能在这个开发周期内稳定的交付给用户,而不是引入一些额外的功能。下一个开发周期中的新功能。要知道,经过6周的迭代开发,虽然功能已经完善,但是在稳定性方面并没有保障,这也是Beta版的价值所在。Beta版与Dev版类似,每周都会发布一个版本,但这些版本不会增加任何新功能,而是会修复各种在线用户发现的bug,从而不断提高Beta版的稳定性。在MicrosoftEdgeBeta版又经历了6周的迭代之后,需要修复的BUG基本已经被修复,所以现在的Beta版可以说是一个相当稳定的版本,接下来会转化为正式版MicrosoftEdge版本。如果从现在的时间节点来看,第6周Beta版转正式版的时候,其实就是第6周Dev版转Beta版的时间。这样,Beta版本将开始新的6周稳定性测试周期,而Canary和Dev将开始新的6周开发周期,以此类推。所以,按照这个规则,如果你是Edge正式版的用户,而你目前使用的版本是Edge90,那么此时的Beta版本一定是Edge91,而Canary和Dev版本已经是Edge92.这就是为什么说Edge使用的版本管理和发布规则(也是Chromium使用的规则)相当成熟和科学的原因。保证每一个正式发布的版本都非常稳定,每一个版本也都有足够的生命周期。6周的功能开发和6周的稳定性测试,该发现的BUG都在开发测试阶段找到并解决了,放心上线。相对于之前在国内流行的一些热修复技术来说,在国外是不能用的,二来也是没有必要的,因为即使没有这些事后修复的黑科技的帮助,我们也可以通过软件工程和管理方法很好。提前保证版本的稳定性。至于每个正式版的生命周期,其实是一件很重要的事情。我发现我用的一些APP根本就没有什么定期的更新节奏,经常是时不时的给你推出一个新版本。我平时是一个更新完就得升级的人,但是有些APP今天升级后,过两天就告诉你有新版本上线了。更新日志是为了修复一些错误。升级后,两天后会弹出更新提示,更新日志修复了一些错误。这样的性能不是一款优秀的APP应该有的。他们正在使用用户的正式版作为金丝雀版本来测试。时间长了,我不想再升级这种APP了,因为升级后两天都没有回来。会让你再次升级。Edge的这种机制充分保证了每个正式版本的生命周期。它每6周更新一次。这些更新都对应一个全新的Chromium内核版本。所以,相信大家都已经了解了这四个版本各自的功能和目标用户群。Canary版本面向发烧友用户;Dev版面向想要尝试新事物,追求一定稳定性的用户;Beta版面向希望提前6周体验最新正式版,但可以接受一定bug的用户;正式版是针对最普通的用户群体。现在您知道了像Edge这样的大型项目是如何进行版本控制的。介绍完这些关于Edge的知识点,再给大家说说Edge在移动端的现状。如果你是细心的用户,你可能会发现GooglePlay上的Edge正式版仍然基于Chromium77内核。相比之下,Chrome已经基于Chromium91内核。按照短短6周升级一个版本的频率来看,77的内核几乎就是两年前的Chromium版本。为什么会有这么大的差距?这是因为一开始PC端的Edge并不是基于Chromium开发的,而是使用微软自家的浏览器内核,而移动端的Edge使用的是Chromium内核。那时候PC端和移动端的代码完全不相干,各司其职。后来微软放弃了自己的浏览器内核,PC端的Edge也转向了Chromium。这时,Edge部门做出了一个决定,要求整个平台统一代码库。但是要统一整个平台的代码库就没那么简单了,也就是说移动端和PC端不能再各自为政了,但是大家要统一步调,统一进度,统一内核版本数字。因此,移动端的Edge此后并没有升级Chromium内核,而是用了将近两年的时间打造了一个全新的全平台聚合版本。它将基于Chromium最新内核版本上线,同时基于Chromium最新内核实时同步上线新版Edge(可能会有长达几天的延迟)。而这样一款全平台融合的全新Edge将于本月晚些时候推出,你会发现Edge的内核版本将从Chromium77直接跳到Chromium92,相当于革命性的升级。不过,与其等到本月晚些时候,您还可以选择今天试用新版Edge。因为按照刚才说的,EdgeBeta版本需要迭代6周才能转化为Edge正式版本,也就是说EdgeBeta已经是基于Chromium92版本,并且已经在测试中了。如果你有兴趣,欢迎加入EdgeBeta阵营。除了能够体验到最新内核的Edge,还可以帮助我们测试更多的问题,在几周内向广大用户发布一个更加稳定的正式版。边缘。EdgeBeta的下载地址为:https://play.google.com/store/apps/details?id=com.microsoft.emmx.beta注意:需要手机访问GooglePlay。