用途:在 Materialize 仓库中提交代码、准备提交、创建 PR、推送分支或打开拉取请求时使用。完整约定见 doc/developer/guide-changes.md。
提交前检查:运行 bin/fmt(格式化所有 .rs、.py、.proto 文件,不接受文件参数)、bin/lint(工具缺失可能报错,可用 bin/ci-builder run stable bin/lint 替代)、cargo clippy --all-targets -- -D warnings,并修复所有警告。不要手动修改 *.snap 文件,应先用 cargo test 再用 cargo insta accept 更新快照;数据驱动测试期望用 REWRITE=1 cargo test ... 重写。
PR 标题与提交信息:Materialize 使用 squash 合并,PR 标题会成为 main 上的提交主题。使用祈使语气,如 Fix X;描述要具体;可按区域加前缀 adapter:、storage:、compute:、sql:。PR 描述需说明变更理由,提及新增或修改的测试,但不列出运行了哪些测试;用 Fixes database-issues#NNNN 自动关闭 issue;用户可见变更需添加发布说明。
Cargo.lock 纪律:不要重新生成整个 Cargo.lock,裸 cargo update 会升级所有语义化兼容依赖并引入无关破坏。新增依赖或改特性只需 cargo check;更新单个 crate 用 cargo update -p <crate>,可加 --precise <ver> 固定版本。改动后审查 diff:git diff Cargo.lock | grep '^[+-]version' | head -40,意外变动用 cargo update -p <crate> --precise <old-version> 固定回去。rebase 冲突时取 HEAD 版本再运行 cargo check,而非 cargo update。
Git 约定:基于 MaterializeInc/materialize 的 main 分支工作,分支推送到自己的 fork,PR 目标为 MaterializeInc/materialize 的 main,每个 PR 只包含一个语义变更。