开发与提交流程
本页说明从准备环境到提交补丁的流程。补丁的格式要求见 checkpatch, 文件归属见 维护者与 area。
环境与前置条件
构建、启动、测试与检查任务都定义在仓库根目录的 justfile 中。在仓库根目录
运行 just 可以列出全部任务,任务按 dev-、build-、
run-、test-、check-、ci- 和 maint-
前缀分组。
QEMU、gem5、Rust 与拓扑相关任务在 Linux 主机上原生运行;其他系统,或设置了
COSIM_ENV=container 的 Linux 主机,默认在临时开发容器中运行。环境要求与
工具版本见 环境与前置条件,容器用法见 开发容器。
子模块与仓库边界
gem5、qemu 和 gem5-resources 是子模块。子模块内的修改
遵守对应仓库自己的规则,顶层仓库的检查规则只适用于本仓库的文件。
初始化与更新子模块使用
git submodule update --init --recursive。更新子模块指针与修改顶层文件分开提交,便于审查和回滚。
子模块改动需要先在子模块仓库中完成审查,再更新顶层指针。
分支与提交
从
main创建分支,一个分支专注一件事。保持提交聚焦,每个非合并提交都必须能独立通过补丁检查。
提交信息使用祈使句描述改动,正文说明原因与影响。
每个提交都必须带有
Signed-off-by:行,格式为Signed-off-by: Name <email>,姓名与邮箱取自git config user.name和git config user.email。提交信息中不添加 AI 归属尾注,例如面向 AI 工具的
Co-authored-by:、Assisted-by:、Generated-by:或🤖标记。新增源文件以
SPDX-License-Identifier:行开头,项目许可证为Apache-2.0;来自MIT、BSD-2-Clause或BSD-3-Clause源码的代码可以使用对应许可证,并在提交信息中说明原因。
提交前检查
在提交或更新拉取请求之前运行:
just check
该任务依次运行 just check-patch、ShellCheck、just check-maintainers
和 just check-cosim。也可以单独运行其中一项:
just check-patch # 当前分支上尚未进入 origin/main 的提交
just check-patch <base-commit> # 指定基线之后的提交
just check-patch-file <patch> # 预览未提交的补丁文件
修改文档时额外运行 just docs-check,它会构建中英文文档并执行双语与站点
检查;文档规则见 文档规范与双语规则。
文件归属
每个受版本控制的文件都必须属于 MAINTAINERS.yml 中的一个 area。提交在现有
area 之外新增文件时,必须在同一个提交中更新 MAINTAINERS.yml,否则
just check-maintainers 会失败。area 的查询、检查与新增维护者见
维护者与 area。