由于无法以原子方式一次性向多个 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。- 集成 - 内部集成代码库。
柔和过渡
如需进行跨多个项目的更改,首选方法是使用软转换。在软转换中,您要对 D
进行更改,以使接口同时支持新旧客户端。例如,如果要替换函数,您可以添加新版本,并将旧函数转换为新函数的封装容器。
请按照以下步骤进行软转换:
- 提交
D
中的更改,以引入新接口,而不破坏P
使用的旧接口。 - 等待
D
的新修订版本滚动到集成代码库中。 - 迁移
P
以使用新界面。 - 等待
P
的新修订版本滚动到集成代码库中。 - 在
D
中发布清理更改,以移除旧接口。
通常,对 FIDL 协议的更新可以通过软转换实现。
硬转换
对于某些更改,打造柔性过渡可能困难或不可能。对于这些更改,您可以进行硬转换。在硬转换中,您将对 D
进行重大更改并手动更新 P
。
请注意,为了防止意外损坏清单内容,Gerrit 配置为不自动对修改清单文件的更改执行 rebase 操作。您必须在合并之前手动执行 rebase 操作,以便提交内容简直是快进。
进行硬转换比软转换压力更大,因为您的更改会阻止 D
中的其他更改在步骤 1 到第 2 步期间在独立项目中使用。
只有 Google 开发者可以进行硬性转换。如需了解相关说明,请参阅内部文档。