You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将git bisect run与检测脚本合并到单个Shell脚本中?

单脚本实现Git Bisect自动二分查找

核心思路

让脚本同时承担bisect流程初始化和提交状态判断两个职责,通过特殊参数区分两种运行模式:

  • 直接执行脚本时:初始化git bisect流程,调用git bisect run指向自身并传入判断模式标记
  • 收到判断模式标记时:执行提交检查逻辑,返回符合git bisect规则的退出码

完整脚本示例(bisecter.sh)

#!/bin/bash

# 判断是否处于bisect检查模式
if [ "$1" = "--bisect-check" ]; then
    TARGET_CONTENT="$2"
    # 这里写你的检查逻辑,比如查找当前提交是否包含目标内容
    if grep -q "$TARGET_CONTENT" ./target-file.txt; then
        # 找到目标内容,标记为bad(因为我们要找引入该内容的提交)
        exit 1
    else
        # 未找到,标记为good
        exit 0
    fi
    # 可选:如果遇到无法检查的情况,返回125跳过该提交
    # exit 125
else
    # 初始化bisect流程
    TARGET_CONTENT="$1"
    if [ -z "$TARGET_CONTENT" ]; then
        echo "用法: $0 <要查找的内容>"
        exit 1
    fi

    # 请根据实际情况替换good和bad的提交哈希/标签
    echo "初始化git bisect..."
    git bisect start
    git bisect good v1.0  # 已知没问题的提交
    git bisect bad HEAD   # 已知有问题的提交

    # 调用git bisect run,指向当前脚本并传入检查模式标记和目标内容
    git bisect run "$0" --bisect-check "$TARGET_CONTENT"

    # 二分结束后清理bisect状态
    git bisect reset
fi

关键细节说明

  • 模式区分:用--bisect-check作为标记,让脚本知道自己是被git bisect调用还是直接执行
  • 脚本自引用:git bisect run "$0"确保调用的是当前脚本,无需额外的外部判断脚本
  • 退出码规则:严格遵循git bisect要求:
    • exit 0:当前提交正常(good)
    • exit 1:当前提交有问题(bad)
    • exit 125:跳过该提交(比如编译失败时)
  • 参数传递:把要查找的内容(比如示例中的102)通过参数传递给检查逻辑部分

使用方法

  1. 给脚本添加执行权限:chmod +x bisecter.sh
  2. 运行脚本并传入目标内容:./bisecter.sh 102

内容的提问来源于stack exchange,提问作者Try_hard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:01:08