AI 辅助代码审查的 Git Hooks 集成:把质量检查放到提交之前

发布时间:2026/7/8 2:11:30
AI 辅助代码审查的 Git Hooks 集成:把质量检查放到提交之前 AI 辅助代码审查的 Git Hooks 集成把质量检查放到提交之前一、代码审查的时机决定修复成本代码审查通常在 PR 提交后进行。开发者写完代码、提交 PR、等待审查反馈、再修改再提交。这个过程至少要几个小时如果审查者忙碌可能要一天以上。而大部分审查反馈是格式问题、类型错误、遗漏的边界处理——这些本来可以在提交前就发现。Git Hooks 提供了在提交前自动检查的机会。pre-commit钩子在git commit执行前触发可以运行格式化、类型检查、lint 和简单的 AI 审查。这些检查不需要完整代码审查的深度但能拦截最常见的低级问题。修复成本低——代码还在本地改完直接提交不需要重新走 PR 流程。二、Git Hooks AI 审查的分层检查策略提交前检查应该分层执行。格式化和 lint 先跑快速拦截明确问题类型检查次之验证接口一致性AI 审查最后执行关注逻辑和边界。flowchart TD A[git commit 触发] -- B[pre-commit 钩子] B -- C[第一层格式化与Lint] C -- D{通过} D --|否| E[自动修复格式问题后重新检查] D --|是| F[第二层类型检查] F -- G{通过} G --|否| H[阻止提交提示类型错误] G --|是| I[第三层AI逻辑审查] I -- J{审查结果} J --|高风险问题| K[阻止提交展示AI反馈] J --|低风险提示| L[允许提交附加审查备注] J --|无问题| M[提交继续]AI 审查只拦截高风险问题安全漏洞、逻辑错误低风险提示只作为备注不阻止提交。如果 AI 审查阻止所有问题开发者会绕过钩子用--no-verify提交钩子就失去了意义。三、pre-commit 钩子的配置实现# .pre-commit-config.yaml # 提交前自动检查配置格式化、类型检查、AI审查 repos: - repo: local hooks: # 第一层代码格式化 - id: format name: Code Format entry: bash -c npx prettier --write $ git add $ language: system types: [javascript, ts] # 第二层类型检查 - id: typecheck name: Type Check entry: bash -c npx tsc --noEmit language: system pass_filenames: false # 第三层AI逻辑审查 - id: ai-review name: AI Logic Review entry: bash -c node scripts/ai-review-hook.js language: system pass_filenames: false # AI审查失败不阻止提交只在高风险时阻止 verbose: trueAI 审查脚本的核心是只检查当前提交的变更文件不是整个项目。通过git diff --cached获取变更内容发送给模型做逻辑审查。// scripts/ai-review-hook.js // AI代码审查钩子只检查当前提交的变更 import { execSync } from child_process; function getStagedChanges(): string { try { // 只获取暂存区的变更内容 return execSync(git diff --cached --diff-filterACMR, { encoding: utf-8, maxBuffer: 1024 * 1024, }); } catch (error) { console.error(获取暂存变更失败:, error); return ; } } async function aiReview(diffContent: string): Promisevoid { if (!diffContent || diffContent.length 50) { // 变更太小不做审查 return; } const prompt 审查以下代码变更只标记高风险问题安全漏洞、逻辑错误、遗漏的异常处理。低风险建议作为备注输出不阻止提交。变更内容${diffContent.slice(0, 2000)}; try { const result await callModel(prompt); const issues parseReviewResult(result); const highRisk issues.filter((i) i.severity high); if (highRisk.length 0) { console.error(高风险问题); highRisk.forEach((i) console.error( - ${i.description})); process.exit(1); // 阻止提交 } const lowRisk issues.filter((i) i.severity low); if (lowRisk.length 0) { console.log(低风险备注); lowRisk.forEach((i) console.log( - ${i.description})); } } catch (error) { // AI审查服务不可用时不阻止提交 console.warn(AI审查服务暂时不可用跳过审查); } }AI 审查失败时不阻止提交这是关键设计。服务不可用时不应该阻塞开发流程。只有明确检测到高风险问题时才阻止。四、Git Hooks 的执行时间不能拖慢提交节奏开发者对git commit的预期是几秒完成。如果钩子执行超过10秒开发者会开始用--no-verify绕过。格式化和 lint 通常在2秒内完成类型检查可能需要5秒AI 审查如果调用远程模型可能需要3-8秒。总时间超过15秒就不可接受了。优化方式AI 审查只在变更文件超过一定量时才执行。改了一行注释不需要AI审查改了一个完整函数才需要。可以通过变更行数阈值控制。另外AI 审查可以考虑使用本地小模型替代远程调用牺牲一点审查质量换取响应速度。还有一个实操问题团队里不同开发者对钩子的容忍度不同。有人愿意等15秒做完整检查有人觉得5秒都太长。解决方案是让 AI 审查作为可选钩子默认启用但可以通过配置关闭。愿意等待的人保留完整检查追求速度的人只跑格式化和类型检查。五、总结AI 辅助代码审查通过 Git Hooks 在提交前执行拦截低级问题减少PR审查负担。检查分层执行格式化、类型检查、AI审查依次进行。AI审查只阻止高风险问题低风险作为备注。服务不可用时跳过审查不阻塞。总执行时间不超过15秒AI审查可选启用。变更行数阈值控制审查触发条件。