git bisect二分查找自动化寻找出错提交commit
2022-02-16 本文已影响0人
D_w
这里直接实践使用git bisect run test-error.sh自动化查找第一条不正常提交。
假设我们有代码仓库内容如下:
image.png
其中readme.txt内容为一行,在某次修改中改为两行,并且之后已提交过多次,现在我们需要找出第一次进入不正常修改的提交的哈希号,具体操作如下:
先在代码仓库路径中创建bisect.sh文件,内容如下:
#!/bin/sh
echo "开始测试"
git bisect start HEAD v1.0 # v1.0是已知的一条正常状态提交记录,与HEAD中间隔11次提交记录
git bisect run ~/testerror.sh # 这个里面的sh文件返回0代表正确,返回1代表错误
git bisect reset
这里git bisect run后面跟的脚本也可以是ruby,python等语言,出于方便移植考虑,这里使用了shell脚本
在C:\Users\xxx下创建testerror.sh文件(xxx是你电脑的用户名目录),内容如下:
#!/bin/sh
line=`cat F:\\\\testgit\\\\readme.txt|wc -l` # 读取readme.txt的行数
echo "行数"
echo $line # 这里行数目前发现是一行输出0,两行输出1,以此类推
num1=0
if test $[line] -eq $[num1]
then
exit 0
else
exit 1
fi
现在在需要测试的代码仓库文件夹中右键,选择Git Bash Here,在git命令窗中输入
./bisect.sh
输出
image.png
这样就找到了第一次将readme.txt修改为两行的记录
注:如果git bisect run 后运行python脚本,则脚本内容可以参考如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
# os.system('build.bat') # 调用构建脚本
# os.system('test.bat')
with open("F:\\testgit\\readme.txt","r",encoding='UTF-8') as f:
data = f.read()
str = data.split('\n')
print(len(str))
if len(str) == 1:
exit(0)
else:
exit(1)