由于无法将更改一次性原子提交到多个 Git 代码库,因此开发者必须仔细协调影响多个花瓣的更改。
例如,如果 Fuchsia 树中的 API 或 ABI 更改会影响 Flutter 或 Go 中的调用方,则需要进行软过渡(首选)或硬过渡。
请注意,某些花瓣可能不在常规 Fuchsia 结账范围内。例如,虽然 Go 运行时属于 third_party/go,但 Fuchsia SDK 的其他使用方可能在其他位置开发(例如,Flutter Engine 是在 GitHub 上开发的)。
术语
D
- Fuchsia 树中使用的项目。P
- Fuchsia 树中使用的另一个项目,对D
有直接依赖项。例如,D
可能是 Fuchsia,P
可能是 Topaz 或 Experiences。- integration - 内部集成仓库。
柔和过渡
若要对多个项目进行更改,首选方法是使用软过渡。在软过渡中,您可以对 D
进行更改,使接口同时支持旧版和新版客户端。例如,如果您要替换某个函数,可以添加新版本,并将旧函数转换为新函数的封装容器。
请按照以下步骤实现平滑过渡:
- 在
D
中完成更改,引入新接口,同时不会破坏P
使用的旧接口。 - 等待
D
的新修订版本集成到代码库中。 - 迁移
P
以使用新接口。 - 等待
P
的新修订版本集成到代码库中。 - 在
D
中提交了清理更改,以移除旧接口。
通常,可以通过软过渡来更新 FIDL 协议。
硬过渡
对于某些更改,很难或根本无法实现平滑过渡。对于这些更改,您可以进行硬转换。在硬转换中,您会对 D
进行破坏性更改,并手动更新 P
。
请注意,为防止意外覆盖清单内容,Gerrit 配置为不会自动对修改清单文件的更改进行重新基准。您必须先手动重置基准,然后才能合并,这样提交内容才会纯粹快进。
进行硬转换比进行软转换更费心,因为您的更改会阻止 D
中的其他更改在第 1 步和第 2 步之间在依赖项项目中生效。
只有 Google 开发者可以进行硬转换。如需了解相关说明,请参阅内部文档。