# git-bisect **Repository Path**: ijinma/git-bisect ## Basic Information - **Project Name**: git-bisect - **Description**: No description available - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-24 - **Last Updated**: 2025-09-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Git Bisect 自动化工具 这是一个用于自动化执行 Git Bisect 的 Python 工具,可以帮助您快速定位代码库中引入问题的具体提交。 ## 功能特点 1. **自动化 Bisect 流程**:自动执行 git bisect 的完整流程,无需手动操作 2. **模块化设计**:构建和检查脚本完全独立,用户可自定义 3. **参数传递**:自动将当前提交哈希传递给构建和检查脚本 4. **详细日志**:实时记录每次提交的测试结果 5. **灵活配置**:支持通过命令行参数指定配置文件 6. **增强的命令执行**:使用增强的命令执行函数,支持更灵活的输出重定向 ## 使用方法 ### 1. 创建配置文件 首先创建一个 `config.json` 配置文件: ```json { "repo": "/path/to/your/repo", "start": "good_commit_hash", "end": "bad_commit_hash", "build_script": "build_script.sh", "check_script": "check_script.sh", "log_dir": ".", "result_md": "result.md" } ``` 配置项说明: - `repo`:代码仓库路径 - `start`:已知的"好"提交哈希 - `end`:已知的"坏"提交哈希 - `build_script`:构建脚本文件名 - `check_script`:检查脚本文件名 - `log_dir`:日志文件存储目录 - `result_md`:(可选)结果文件路径,如果不指定则会生成带时间戳的文件 ### 2. 创建构建脚本 创建 `build_script.sh` 文件: ```bash #!/bin/bash COMMIT_SHORT=$1 # 获取当前提交的前11位哈希 echo "Building commit: $COMMIT_SHORT" # 在这里添加您的构建逻辑 # 构建成功返回0,失败返回非0值 exit 0 ``` ### 3. 创建检查脚本 创建 `check_script.sh` 文件: ```bash #!/bin/bash COMMIT_SHORT=$1 # 获取当前提交的前11位哈希 echo "Checking commit: $COMMIT_SHORT" # 在这里添加您的检查逻辑 # 检查通过返回0,失败返回非0值 exit 0 ``` ### 4. 运行工具 ```bash # 使用默认配置文件 python3 git_bisect.py # 指定配置文件 python3 git_bisect.py -c/--config /path/to/your/config.json ``` ## 工作原理 ```mermaid flowchart TD A[开始: 运行 git_bisect.py] --> B[读取配置文件] B --> C[进入代码仓库目录] C --> D[执行 git bisect start] D --> E[标记起始提交为 good] E --> F[标记结束提交为 bad] F --> G[执行 git bisect run] G --> H[Git 选择中间提交进行测试] H --> I[调用 Python 脚本测试模式] I --> J[获取当前提交哈希] J --> K[执行 build_script.sh 并传参] K --> L{构建成功?} L -->|否| M[返回退出码 1
标记为 bad 提交] L -->|是| N[执行 check_script.sh 并传参] N --> O{检查通过?} O -->|是| P[返回退出码 0
标记为 good 提交] O -->|否| Q[返回退出码 1
标记为 bad 提交] P --> R[记录测试结果到日志] Q --> R M --> R R --> S{还有提交需要测试?} S -->|是| H S -->|否| T[找到第一个 bad 提交] T --> U[结束 bisect 过程] U --> V[输出结果] ``` ## 日志记录 工具会在 `log_dir` 目录中生成结果文件,记录每次提交的测试结果: - 如果配置了 `result_md` 参数,则会使用指定的文件名 - 如果未配置 `result_md` 参数,则会生成带时间戳的 `YYYYMMDDHHMMSS_commit_results.md` 文件 结果文件格式如下: | Commit | Build | Check | Status | |--------|-------|-------|--------| | abc123 | 1 | 1 | good | | def456 | 1 | 0 | bad | - Commit:提交哈希 - Build:构建结果(1=成功,0=失败) - Check:检查结果(1=通过,0=失败) - Status:提交状态(good=好提交,bad=坏提交) 每次运行脚本时,如果指定了 `result_md` 参数且文件已存在,会自动删除旧文件。 ## 注意事项 1. 确保构建脚本和检查脚本具有可执行权限 2. 构建脚本和检查脚本应处理所有可能的错误情况 3. 工具会自动将当前提交的前11位哈希作为参数传递给脚本 4. 脚本中可通过 `$1` 获取提交哈希参数 5. 如果配置了 `result_md` 参数,每次运行会删除已存在的结果文件 6. 如果未配置 `result_md` 参数,结果文件名包含时间戳,防止多次运行时文件被覆盖