Electron 版本控制¶
深入解析我们的版本控制策略与实现。
自 2.0.0 版本起,Electron 遵循 语义化版本 规范。以下命令将安装最新的 Electron 稳定版构建:
```sh npm2yarn npm install --save-dev electron
语义化版本¶
下表明确列出了不同类型的变更与其对应的语义化版本类别(例如主版本、次版本、补丁版本)。
| 主版本号递增 | 次版本号递增 | 补丁版本号递增 |
|---|---|---|
| Electron 破坏性 API 变更 | Electron 非破坏性 API 变更 | Electron 错误修复 |
| Node.js 主版本更新 | Node.js 次版本更新 | Node.js 补丁版本更新 |
| Chromium 版本更新 | 与修复相关的 Chromium 补丁 |
更多信息请参阅 语义化版本 2.0.0 规范。
请注意,大多数 Chromium 更新都将被视为破坏性变更。可以向后移植的修复通常会被 cherry-pick 为补丁。
稳定化分支¶
稳定化分支是与 main 并行运行的分支,只接受与安全或稳定性相关的 cherry-pick 提交。这些分支永远不会合并回 main。
gitGraph
commit
commit
branch N-x-y
checkout main
commit id:"fix-1"
checkout N-x-y
cherry-pick id:"fix-1"
checkout main
commit id:"fix-2"
checkout N-x-y
cherry-pick id:"fix-2"
checkout main
commit
commit
自 Electron 8 起,稳定化分支始终是 主 版本线,并按照以下模板命名:$MAJOR-x-y,例如 8-x-y。(在此之前,我们使用 次 版本线,并将其命名为 $MAJOR-$MINOR-x,例如 2-0-x。)
我们允许同时存在多个稳定化分支,每个受支持的版本对应一个。
[!TIP] 如需了解支持哪些版本,请参阅我们的 Electron 版本发布 文档。
gitGraph
commit
branch "41-x-y"
checkout main
commit
commit
commit id:"fix-a"
checkout "41-x-y"
cherry-pick id:"fix-a"
checkout main
commit
commit id:"fix-b"
checkout "41-x-y"
cherry-pick id:"fix-b"
checkout main
commit
branch "42-x-y"
checkout main
commit
commit id:"fix-c"
checkout "41-x-y"
cherry-pick id:"fix-c"
checkout "42-x-y"
cherry-pick id:"fix-c"
checkout main
commit
commit id:"fix-d"
checkout "41-x-y"
cherry-pick id:"fix-d"
checkout "42-x-y"
cherry-pick id:"fix-d"
checkout main
commit
较旧的版本线将不再受到 Electron 项目的支持。
发布周期¶
Electron 遵循 8 周的定期发布周期,其关键里程碑与 Chromium 发布周期中的对应日期一致。
gantt
title Electron release cycle
dateFormat YYYY-MM-DD
axisFormat Week %W
todayMarker off
section v41
Alpha phase :a1, 2026-01-19, 4w
M146 enters Chrome beta :milestone, bm1, after a1, 0d
Beta phase :b1, after a1, 4w
M146 enters Chrome stable :milestone, s1, after b1, 0d
Supported until v44 release :active, after b1, 12w
section v42
Alpha phase :a2, after b1, 4w
M148 enters Chrome beta :milestone, bm2, after a2, 0d
Beta phase :b2, after a2, 4w
M148 enters Chrome stable :milestone, s2, after b2, 0d
Supported until v45 release :active, after b2, 4w
示例¶
当 Electron 41 发布稳定版时,Electron 42 的发布线从 main 分支出来。其首个 alpha 版本将包含 main 上的所有更改:
一个可以向后移植到发布分支的错误修复进入 main。补丁被应用后,将会发布在下一个 v42.0.0-alpha.2 版本中。
gitGraph
commit
commit
commit
branch "42-x-y"
checkout "42-x-y"
commit id:"42.0.0-alpha.1" tag:"v42.0.0-alpha.1"
checkout "main"
commit
commit id:"fix-1"
checkout "42-x-y"
cherry-pick id:"fix-1" tag:"v42.0.0-alpha.2"
支撑 Electron 42 的 Chromium 版本进入 Chrome 的 Beta 渠道。alpha 线被提升为 beta。
gitGraph
commit
commit
commit
branch "42-x-y"
checkout "42-x-y"
commit id:"42.0.0-alpha.1" tag:"v42.0.0-alpha.1"
checkout "main"
commit
commit id:"fix-1"
checkout "42-x-y"
cherry-pick id:"fix-1" tag:"v42.0.0-alpha.2"
checkout "main"
commit
commit
commit id:"fix-2"
checkout "42-x-y"
cherry-pick id:"fix-2" tag:"v42.0.0-beta.1"
Beta 版本继续每周发布,直到 Electron 42 升级为稳定版,然后同样的周期将以 43-x-y 重新开始。之后,一个零日漏洞被公开,修复被应用到 main。我们将修复向后移植到 42-x-y 线,并发布 42.0.1。
gitGraph
commit
commit
commit
branch "42-x-y"
checkout "42-x-y"
commit id:"42.0.0-alpha.1" tag:"v42.0.0-alpha.1"
checkout "main"
commit
commit id:"fix-1"
checkout "42-x-y"
cherry-pick id:"fix-1" tag:"v42.0.0-alpha.2"
checkout "main"
commit
commit
commit id:"fix-2"
checkout "42-x-y"
cherry-pick id:"fix-2" tag:"v42.0.0-beta.1"
checkout "main"
commit id:"fix-3"
checkout "42-x-y"
cherry-pick id:"fix-3" tag:"v42.0.0"
checkout "main"
branch "43-x-y"
checkout "43-x-y"
commit id:"43.0.0-alpha.1" tag:"v43.0.0-alpha.1"
checkout "main"
commit id:"security-fix"
checkout "42-x-y"
cherry-pick id:"security-fix" tag:"v42.0.1"
checkout "43-x-y"
cherry-pick id:"security-fix" tag:"v43.0.0-alpha.2"
回退请求流程¶
所有受支持的发布线都会接受外部拉取请求,以回退先前已合并到 main 的修复,但对于某些较旧的受支持线,这可能逐案处理。所有围绕发布线回退的有争议的决定,都将由
Releases Working Group
作为其周会议程事项,在回退 PR 提出当周的周会上解决。
功能标志¶
功能标志是 Chromium 中的常见做法,并且在 Web 开发生态系统中已经成熟。在 Electron 的上下文中,功能标志或软分支必须具有以下属性:
- 它在运行时或构建时启用/禁用;我们不支持请求作用域的功能标志这一概念
- 它完全隔离新旧代码路径;重构旧代码以支持新功能会_违反_功能标志契约
- 功能标志最终会在功能发布后移除
语义化提交¶
所有拉取请求都必须遵循 Conventional Commits 规范,该规范可总结如下:
- 会导致 SemVer major 版本提升的提交,其正文必须以
BREAKING CHANGE:开头。 - 会导致 SemVer minor 版本提升的提交必须以
feat:开头。 - 会导致 SemVer patch 版本提升的提交必须以
fix:开头。
electron/electron 仓库还强制使用 squash 合并,因此你只需确保拉取请求具有正确的标题前缀。
带版本号的 main 分支¶
main分支始终对应当前预发布线之上的主版本。main的不稳定每日构建版本通过 npm 上的electron-nightly包发布。- 发布分支永远不会合并回
main。 - 所有
package.json值固定为0.0.0-development。
历史版本控制(Electron 1.X)¶
Electron 版本 < 2.0 不符合 SemVer 规范:主版本对应面向最终用户的 API 变更,次版本对应 Chromium 主版本发布,修订版本对应新功能和缺陷修复。虽然这对合并功能的开发者很方便,但会给面向客户端应用的开发者带来问题。像 Slack、Teams、VS Code 和 GitHub Desktop 这样的大型应用的 QA 测试周期可能很长,而稳定性是高度期望的结果。在尝试吸收缺陷修复的同时采用新功能存在高风险。
以下是 1.x 策略的一个示例:
---
config:
gitGraph:
mainBranchName: 'master'
---
gitGraph
commit
branch "bugfix-1"
checkout "bugfix-1"
commit
checkout master
merge "bugfix-1" tag:"1.8.1"
branch "feature"
checkout "feature"
commit
checkout master
merge "feature" tag:"1.8.2"
branch "bugfix-2"
checkout "bugfix-2"
commit
checkout master
merge "bugfix-2" tag:"1.8.3"
使用 1.8.1 开发的应用无法在不吸收 1.8.2 功能的情况下获取 1.8.3 缺陷修复,除非通过回退该修复并维护一个新的发布线。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron