自动化二分排查
无人值守的二分排查:让脚本对每个候选版本执行验证,按退出码判定好与坏,自动收敛并输出结果。它把「逐个检出再验证」压缩成一条命令,前提是验证脚本能在任意历史版本上构建并运行。
基本信息
| 用法 | 把验证命令交给二分命令执行 |
|---|---|
| 判定规则 | 退出码 0 视为正常,指定码视为跳过,其余非零视为有问题 |
| 前提条件 | 脚本能在任意历史版本上完成构建与验证 |
| 操作流程 | 先标记起点与终点,再用脚本自动推进 |
| 收尾 | 查看结果后重置二分状态,回到原始分支 |
典型使用场景
- 定位某个功能从哪个版本开始失效
- 排查构建失败首次出现的提交
- 自动化回归定位,减少人工逐个检出
- 验证性能退化由哪次改动引入
- 在提交量很大的区间内快速缩小范围
常用示例
常用示例
git bisect start HEAD v2.0 # 标记当前有问题、旧版本正常
git bisect run ./test-repro.sh # 自动逐版本验证并收敛
git bisect run sh -c 'make >/dev/null && ./run-test'
git bisect reset # 结束二分并回到原始分支
git bisect log # 查看本次二分的过程记录退出码含义
| 退出码 | 含义 |
|---|---|
| 0 | 该版本正常,问题不在这一侧 |
| 指定跳过码 | 无法验证该提交,跳过继续 |
| 其他非零 | 该版本有问题 |
| 异常退出 | 中止自动过程,需要人工介入 |
为自动二分写一个「构建加复现」的脚本,比人工逐个检出验证快得多,也能避免不同人判断标准不一致。
验证耗时直接决定总耗时:把复现脚本压缩到分钟级,区间很大时才不至于等到失去耐心。
跳过码用于那些无法构建的历史版本,避免个别提交让整个自动流程报错中断。
二分结束后记得重置状态,否则仓库停留在某次中间检出上,后续操作都在错误基线上进行。