支持 Commit Message Review(提交信息评审) #648
背景与动机Android 官方贡献指南在 Submit Patches - Commit your change 这篇文章提出了写好 commit message 的 7 条规则,其中前 6 条大多是格式规范(如标题不超过 50 字符、使用祈使语气、正文每行不超过 72字符等),但第 7 条是核心: 这条规则强调的是:commit message 的正文应该解释"做了什么"以及"为什么这么做",而不是"怎么做的"。 正如文章所说: 现状目前 ocr 在处理 commit 时,只是把 commit message 作为评审的 background 上下文 注入,而不是作为独立的评审对象: // review_cmd.go 这意味着,即使开发者的 commit message 写得很差(比如没有解释动机、只有"fix bug"这样的标题),ocr 也不会对其进行任何质量检查。 脚本能检查什么,不能检查什么? 根据 chris.beams.io (https://chris.beams.io/posts/git-commit/) 的 7 条规则: ┌──────────────────────────────┬───────────────────────────┐ 第 7 条是脚本无法覆盖的。 判断一段 commit message 为什么这件事需要 LLM 来做? 文章里举了一个 Bitcoin 项目的真实例子,关于 serialize.h 的异常处理重构: 不好的写法(仅仅描述"怎么改"): ▎ Changed exception handling in serialize.h. Refactored to throw specific exceptions. 好的写法(解释了"为什么改"): ▎ Simplify serialize.h's exception handling 好的 message 让读者不用读代码就能理解:旧的问题是什么、新方案解决了什么、为什么旧方案不好。 再比如文章中提到的标题语气测试: ▎ 写完标题后,试着把它放进这个句子里: 这种语义层面是否"通顺"和"符合直觉",脚本很难准确判断,但 LLM 可以。 期望的用法希望 ocr 能支持对 commit message 本身的 review。review 时,应将 commit message 内容 和对应的 diff 内容 一起发给 LLM,让模型既能检查 关于配置方式,这里提供几种可能的实现方向,供维护者参考: 方案 A:使用特殊 path 前缀(个人推荐,改动最小) 利用 path 字段本身承载"匹配目标"的语义,用特殊前缀标识非文件类对象,无需引入新字段: {
好处:零 schema 变更,老配置完全兼容,新增功能几乎没有学习成本。 方案 B:在 rule.json entry 中增加 target 字段 {
好处是语义更明确,但缺点是需要扩展 schema,增加配置复杂度。 方案 C:命令行新增 flag 适合临时/个人使用,不改动 rule.json: ocr review --from HEAD^ --to HEAD --commit-message-rule ./rules/commit-msg.md 个人更倾向方案 A。现有 path 字段已经足够表达"匹配什么"这层语义,没必要为了类型区分再引入一个新字段。@commit-message 推荐的规则内容示例 rules/commit-message-review.md 可以聚焦在脚本无法检查的推理类问题上: Commit Message 评审要点1. 标题应使用祈使语气
2. 正文必须解释"为什么"
3. 如果改动了现有逻辑,应解释旧方案的缺陷
一个具体的 Android 场景例子 假设开发者的 commit message 如下: Update UserRepository to use coroutines Changed the synchronous DAO methods to suspend functions. 如果用上述规则进行 LLM review(同时提供 diff content),应该给出类似这样的反馈: ▎ Commit Message Review 结果: 总结Commit message 的质量直接影响代码的可维护性和团队协作效率。格式类的规范可以通过脚本 / linter 这与 ocr 的核心定位高度契合。 需要特别说明的是:本文中引用 How to Write a Git Commit Message (https://chris.beams.io/posts/git-commit/) 只是为了举例说明 commit
希望维护者能考虑支持 commit message review 的功能。 感谢! |
Replies: 1 comment 2 replies
|
@hwbest 感谢你的想法,我个人建议是如果要做这个功能的话,最好把commit msg 的评审和代码的评审区分开。主要是几个原因:
|
@hwbest 感谢你的想法,我个人建议是如果要做这个功能的话,最好把commit msg 的评审和代码的评审区分开。主要是几个原因: