Git二分法定位Bug

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。

结果输出 当定位到首个问题提交时,会自动输出该提交的哈希和相关信息,包括作者、日期和提交消息。

注意事项

  1. 测试脚本必须具有明确的通过/失败状态(返回值为0表示通过)
  2. 复杂项目可能需要更精细的测试条件判断
  3. 建议在独立分支或临时工作区执行该操作
  4. 二进制文件变更可能导致某些提交无法正常测试

高级用法扩展

对于需要更复杂判断的场景,可以单独编写测试脚本并引用:

bash 复制代码
#!/bin/bash
git bisect run ./custom_test_script.sh

其中custom_test_script.sh应返回:

  • 0:测试通过
  • 1-127(除125):测试失败
  • 125:跳过当前提交(无法测试)
相关推荐
死磕音视频2 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林2 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li4 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook4 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
顽疲4 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
康小旺4 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
启观川5 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
南笙北梦5 小时前
本地开源大模型多轮对话显存泄漏排查与修复实录
python
小羊没烦恼!5 小时前
如何在IIS6,7中部署ASP.NET网站?
数据库·后端·python·web安全·asp.net