Git二分法定位Bug的代码示例
使用Git二分法(git bisect)定位Bug的自动化脚本示例,结合Shell和Git命令实现:
bash
#!/bin/bash
# 定义已知的好版本和坏版本提交哈希
GOOD_COMMIT="a1b2c3d" # 替换为已知无Bug的提交
BAD_COMMIT="z9y8x7w" # 替换为已知有Bug的提交
# 启动二分查找
git bisect start
git bisect good $GOOD_COMMIT
git bisect bad $BAD_COMMIT
# 自动化测试脚本(需根据项目实际情况修改)
while true; do
# 运行测试命令(示例:Python项目的单元测试)
if python -m pytest tests/unit/test_bug_feature.py; then
git bisect good
else
git bisect bad
fi
# 检查是否完成二分查找
if [ $(git bisect log | grep -c "first bad commit") -ne 0 ]; then
echo "Found first bad commit:"
git bisect log | grep -A 3 "first bad commit"
break
fi
done
# 重置二分查找状态
git bisect reset
关键步骤说明
初始化二分查找 通过git bisect start启动流程,用good和bad标记已知的正常和有问题的提交点。
自动化测试集成 脚本中python -m pytest部分应替换为实际项目的测试命令。测试通过时标记为good,失败时标记为bad。
结果输出 当定位到首个问题提交时,会自动输出该提交的哈希和相关信息,包括作者、日期和提交消息。
注意事项
- 测试脚本必须具有明确的通过/失败状态(返回值为0表示通过)
- 复杂项目可能需要更精细的测试条件判断
- 建议在独立分支或临时工作区执行该操作
- 二进制文件变更可能导致某些提交无法正常测试
高级用法扩展
对于需要更复杂判断的场景,可以单独编写测试脚本并引用:
bash
#!/bin/bash
git bisect run ./custom_test_script.sh
其中custom_test_script.sh应返回:
- 0:测试通过
- 1-127(除125):测试失败
- 125:跳过当前提交(无法测试)