美文网首页
git bisect二分查找自动化寻找出错提交commit

git bisect二分查找自动化寻找出错提交commit

作者: D_w | 来源:发表于2022-02-16 10:55 被阅读0次

    这里直接实践使用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)
    

    相关文章

      网友评论

          本文标题:git bisect二分查找自动化寻找出错提交commit

          本文链接:https://www.haomeiwen.com/subject/fhgrlrtx.html