git统计每个人的代码行数_项目出了bug如何甩锅?使用这个Git工具帮你找到元凶...

公众号关注 “程序员遇见GitHub”

设为“ 星标”,重磅干货,第一时间送达。 b8ac4ececd50c23e6fabb70de761006d.png

作为程序员,在职场当中经常遇到出现了问题需要定职定责的情况。比如某个系统出现了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文件当中,给我们详细展示这些代码的情况。

7938584f2887fefa89253139eb32ebda.png

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

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

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

3fd5de93fa4e1639111adbddda7bc197.png

二分查找

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

有的时候我们的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输出的结果是这样的,注意一下下方的提示语:

4639ffa657a540bb7506991dba7002b8.png

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

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

git bisect start HEAD xxxx
git bisect run test_case.sh

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

今天的文章就到这里,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、在看、转发)

推荐阅读:

我教你如何读博!

牛逼!轻松高效处理文本数据神器

B站强化学习大结局!

如此神器,得之可得顶会!

兄弟们!神经网络画图,有它不愁啊

太赞了!东北大学朱靖波,肖桐团队开源《机器翻译:统计建模与深度学习方法》

当年毕业答辩!遗憾没有它...

已开源!所有李航老师《统计学习方法》代码实现

这个男人,惊为天人!手推PRML!

它来了!《深度学习》(花书) 数学推导、原理剖析与代码实现

你们心心念念的MIT教授Gilbert Strang线性代数彩板笔记!强烈推荐!

GitHub超过9800star!学习Pytorch,有这一份资源就够了!强推!

你真的懂神经网络?强推一个揭秘神经网络的工具,ANN Visualizer

诸位!看我如何白嫖2020 icassp!

这个时代研究情感分析,是最好也是最坏!

BERT雄霸天下!

玩转Pytorch,搞懂这个教程就可以了,从GAN到词嵌入都有实例

是他,是他,就是他!宝藏博主让你秒懂Transformer、BERT、GPT!

fitlog!复旦邱锡鹏老师组内部调参工具!一个可以节省一篇论文的调参利器

Github开源!查阅arXiv论文新神器,一行代码比较版本差别,我爱了!

开源!数据结构与算法必备的 50 个代码实现

他来了!吴恩达带着2018机器学习入门高清视频,还有习题解答和课程拓展来了!

太赞了!复旦邱锡鹏老师NLP实战code解读开源!

这块酷炫的Python神器!我真的爱了,帮助你深刻理解语言本质!实名推荐!

论文神器!易搜搭

不瞒你说!这可能是世界上最好的线性代数教程

b0bdafeb15e7fbe093ade577c41051bd.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值