前言

作为程序员,在职场当中经常遇到出现了问题需要定职定责的情况。比如某个系统出现了bug,导致了故障,那么这口锅究竟是谁的?这个是需要讨论的,一般来说需要测试、开发一起来背锅。如果代码不是我们写的,我们肯定是不想背这个锅的,那么怎么样来证明出bug地方的代码是谁写的呢?

这个时候我们就可以使用git来寻找代码的提交记录,从而找到罪魁祸首。

追查记录

Git当中有一个很重要的功能叫做git blame,从名字我们就可以看出来,这个功能是用来甩锅的。我们可以通过它查找到每一个文件每一行的提交记录,究竟这行代码是谁修改和引入的,非常方便我们用来定责。

Git blame可以传入一个参数L指定某一个文件的行数,比如我随便找了一个我private的repo运行了一下:


git blame -L 23,30 myhive.py

这里的23,30表示的myhive.py这个文件行数的起始位置,开始是第23行,结束是第30行。接着我们会进入到一个vim文件当中,给我们详细展示这些代码的情况。

我们可以看到结果分成4列,第一列是commit id,对应的是这一行代码是在哪一个commit当中出现的,第二列是提交人,也就是做出修改的人。第三列是修改时间,第四列是具体的代码内容。

当然由于这是我个人的repo,所以看到的代码都是我个人修改的。如果是大家一些协同开发的项目,就可以看到多人提交的情况了。

当然现在一些先进的IDE当中也集成了这个功能,比如著名的jetbrains全家桶,我们可以通过右键选择git,之后选择Annotate,之后代码左侧会展示对应的修改人以及修改时间,方便我们追查代码的修改对象。其实也不只是在问责,比如在阅读其他团队的代码的时候,遇到问题了,要找对应的人询问,也是一个很好的方法。

二分查找

我第一次看到这个功能的时候的确被惊艳了,但是回想起来至今好像也没用上过。可能在一些特定的场景下会有用吧。

有的时候我们的repo会非常巨大,会有很多的开发者,我们每次上线的时候会合并数十个提交。这就导致了一个问题,当我们上线测试的时候,如果发现了bug会很难排查,因为你不知道是哪一个提交带来的问题。这个时候一个比较好的办法当然是二分查找,当然我们也可以手动进行,然而git当中集成了这个功能,我们直接使用就好。

首先我们运行git bisect start,表示我们开始二分查找。bisect就是git当中二分查找的工具。

之后我们继续输入git bisect bad,表示当前的分支是有问题的。接着我们输入git bisect good xxxx,这里的xxxx是一个commitid或者是一个标签,告诉git我们最后一次已知的正确的提交是哪一个。这样git会把当前和这个提交之间的提交全部找出来,假如说这当中一共发生了23个提交,那么git会选出中间的提交进行跳转。

这个时候如果我们在这个中间的分支上测试OK,那么我们就输入git bisect good,告知git这个分支是正确的,从而帮助它缩小范围。如果这个分支错误,那么就输入git bisect bad。

当二分到最后git找到了那个最早出问题的提交之后,它会告诉我们提交的commitid以及相关的提交记录,这样可以方便我们更快地找到bug。

由于我没有很好的测试repo,所以只能找来一张截图,当我们找到错误的分支之后,git输出的结果是这样的,注意一下下方的提示语:

最后,不要忘了使用git bisect reset重置HEAD指针回到最开始的位置,否则可能会陷入一些奇怪的状况当中。

如果我们有健全的测试脚本可以测试提交是否正确的话,比如正确返回1否则返回0,我们也可以让git自动执行二分查找。比如这样:

git bisect start HEAD xxxx
git bisect run test_case.sh

这样git会调用test_case.sh这个文件,直到找出错误提交为止。其实还是挺方便的,只是我作为开发的时候很少接触这么多提交一起发布的状况,一般来说要处理的提交数量都很少,有bug也很容易找到。

最后的最后

送各位小伙伴一个好玩的学习教程吧,你可以根据自己需要选择订阅。
玩转Git分布式版本控制系统实战

趣话题:git三部曲(一)-bug之争,到底谁才是该背锅的那个人?相关推荐

  1. 微信翻译出Bug上热搜,程序员又背锅?

    作者| 伍杏玲 来源 | 程序人生(ID:coder_life) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_source=cxrs_ ...

  2. 微信翻译生日快乐的代码_微信翻译出 Bug 上热搜,程序员又背锅?!

    天撸了!昨天微信翻译因为出Bug被网友送上热搜,网友质疑微信在翻译明星内容时,结果是近乎"恶搞". 当输入:"you play basketball like caixu ...

  3. 微信翻译出 Bug 上热搜,程序员又背锅?!

    天撸了!昨天微信翻译因为出Bug被网友送上热搜,网友质疑微信在翻译明星内容时,结果是近乎"恶搞". 当输入:"you play basketball like caixu ...

  4. 遇到bug的解决办法,测试再也不背锅了

    为什么定位问题如此重要? 可以明确一个问题是不是真的"bug" 很多时候,我们找到了问题的原因,结果发现这根本不是bug.原因明确,误报就会降低 多个系统交互,可以明确指出是哪个系 ...

  5. vscode上的git三部曲+git pull操作

    git三部曲:git add ..git commit -m ''.git push,命令在连接远程仓库的本地仓库路径下的终端执行. vscode上的可视化操作如下: 1.对仓库里的文件做更改,让仓库 ...

  6. git 主干修改合并到分支_这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师"合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的是 ...

  7. 软件测试完后,运行后还有BUG,测试人员就应该背锅吗?

    测试完成后还有bug,测试人员肯定是有责任的,第一时间要赶紧处理而不是着急甩锅.但是这口锅全部扣测试身上,明显也是不能接受的,关键在于测试人员需要找出足够的证据来保护自己. 或许很多人会说测试不可能发 ...

  8. 背锅侠?程序出现bug是测试/开发工程师水平有限导致的?我只是个搬砖的......

    目录:导读 前言 一.Pytest自动化框架 二.Web自动化测试 三.Appium自动化 四.Robotframework 五.接口自动化测试 六.JMeter接口测试 七.Postman接口测试 ...

  9. iPhone14和Mate 50先后“亮剑”,3D ToF镜头上位,结构光和ToF之争,ToF才是未来?

    8月17日,"iPhone 14 将与华为 Mate 50 同期发布 " 登上微博热搜.两个高端阵营的头部玩家先后"亮剑",一时成为业界颇为关注的焦点.与此同时 ...

最新文章

  1. 《微生物学报》“微生物大数据资源”专刊邀稿函
  2. floyd算法_最短路径的算法:Floyd算法
  3. java:方法覆盖与方法重载
  4. UA MATH567 高维统计I 概率不等式3 亚高斯性与亚高斯范数
  5. js中function参数默认值
  6. 项目回顾1-图片上传-form表单还是base64-前端图片压缩
  7. python变量输出到文件_使用函数将多个变量写入文件
  8. 【转】科大校长给数学系学弟学妹的忠告本科数学参考书
  9. java中的char类型所占空间
  10. Python + selenium之组织unittest单元测试用例
  11. 评价——秩和比综合评价
  12. 先锋linux 64位安装包的安装使用
  13. HTTP利用API接口,解密生意参谋
  14. 《空间分析》——思维导图
  15. android 国际化之Locale
  16. iOS、mac开源项目及库(转载)
  17. Adobe_Acrobat_Pro_DC_2022.003.20314 下载安装
  18. 一篇文章,带你详细了解华为认证体系证书(二)
  19. 杰理之上下文件夹播放上文件夹从最后一首播放【篇】
  20. Notepad++ 设置tab为N个空格

热门文章

  1. 【渝粤教育】21秋期末考试混凝土结构10515k1
  2. [渝粤教育] 西南科技大学 计算机工业控制 在线考试复习资料
  3. 【渝粤题库】陕西师范大学210006幼儿园课程作业(高起专)
  4. 【渝粤题库】广东开放大学 系统工程 形成性考核
  5. 亿佰特电源模块:无线通信模块电平转换指南
  6. java期末考试试卷及答案文库_JAVA期末考试试题及答案.docx
  7. vscode 取消拉去变基_GIT快速回忆
  8. Django-认证系统
  9. 基于windows平台的命令行软件安装工具Chocolatey的安装
  10. Android开源工具项目集合