git统计每个人的代码行数_项目出了bug如何甩锅?使用这个Git工具帮你找到元凶...
公众号关注 “程序员遇见GitHub”
设为“星标”,重磅干货,第一时间送达。
作为程序员,在职场当中经常遇到出现了问题需要定职定责的情况。比如某个系统出现了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 xxxxgit 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神器!我真的爱了,帮助你深刻理解语言本质!实名推荐!
论文神器!易搜搭
不瞒你说!这可能是世界上最好的线性代数教程
git统计每个人的代码行数_项目出了bug如何甩锅?使用这个Git工具帮你找到元凶...相关推荐
- git统计每个人的代码行数_程序员实用工具,推荐一款代码统计神器GitStats
阅读全文需7分钟,工具很实用. 1. 前言 对于Git项目开发,有一些可视化的工具,如gitk,giggle等,来查看项目的开发历史.但对于大型的项目,这些简单的可视化工具远远不足以了解项目完整的开发 ...
- 【git】统计每个人的代码行数
#!/bin/bashrm -f ~/git.log cd 路径/repositories# 获取所有的仓库 for dir in $(ls ./) docd $dir# 获取子目录for dir1 ...
- 统计java代码行数_统计项目代码行数
今天测试告知需要项目的代码行数,项目怎么也有十万左右的代码行数,想想就想奔溃了, Eclipse一定有这方面的统计,应该也有统计工具,于是上网查了一番,果然找到了. 1.我要查询的文件类型为*.xml ...
- gitlub统计一个人提交代码行数
查看git提交历史 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史. 完成这个任务最简单而又有效的工具是 git log 命令. 不传入任何参数的默认情况下,git log 会按时 ...
- 统计代码行数_推荐一波代码量、行数、提交量、作者等全维度统计神器
背景 代码各种维度的统计在有些时候是很重要的,这里总结一些常用的牛逼的代码统计工具,着重介绍了个人使用的 Statistic 插件.但是如果你是想统计团队维度的数据,推荐后面介绍的 git_stats ...
- eclipse代码量统计插件_Android Studio 代码行数统计插件Statistic的简单使用
在项目开发过程中,有时候需要统计代码行数(比如组长想关心一下你的代码量,或者要申请软件著作权时),需要统计的文件类型主要是 .java..xml..kt等,已经有人开发好相关插件了,如果你是用Andr ...
- c++ 不要节约代码行数_不要只是代码,但也c
c++ 不要节约代码行数 程序员的生活 (Programmers' Life) I owe my passion for coding to a very dear friend of mine, w ...
- idea 查询项目代码行数_程序员的福利,四个技巧,让OneNote支持代码高亮
点击蓝字 关注我们 写在前面 对于程序员来说,代码高亮是最基本的需求. 印象笔记.有道云笔记.为知笔记都提供了相应的功能. 而OneNote,沿袭了微软"术业有专攻"的理念,并没有 ...
- pycharm 查看代码行数_【收藏】提高PyCharm效率的10个小技巧
PyCharm是最常用的python开发IDE,程序员可以通过PyCharm强大的功能节约大量时间用来 摸鱼 工作,提高生产效率. 阿狗总结了10个自己会用到的PyCharm中可以提高撸码效率的小技巧 ...
最新文章
- python中yield的认识与学习|生成器
- 面向生信分析的高性 RStudio 服务器
- 深度好文:Linux操作系统内存
- ExcelPro《EXCEL图表之道-如…
- 前端那些事之原生 js实现贪吃蛇篇
- android数据库开发案例教程,Android Studio项目开发教程 第6章 数据库编程(30页)-原创力文档...
- OpenShift 4 之 GitOps(5)用ArgoCD配置其他OpenShift资源
- 【nginx】关于fastcgi_cache
- 关于目前深度学习技术的相关思考----个人理解笔记
- 3dmax教程技术:3dmax 怎么去掉贴图_3dmax如何去掉贴图
- COSCon'20 Apache Roadshow- China 精彩收官!|城市回顾篇
- [springboot 开发单体web shop] 1. 前言介绍和环境搭建
- 这45道面试可能被问到的JS判断题!你能答对几道?
- iphone相册储存空间已满_iPhone 总提示“iCloud储存空间将满”,如何解决?
- 2020年有寓意的领证日期_2020年领证的好日子-2020有寓意的领证日期【蜜匠婚礼】...
- 【华人学者风采】胡事民 清华大学
- 设置微信分享的标题 缩略图 连接 描述
- 在Pycharm中更新安装最新版本pip,安装tensorflow
- 百世集团去年第四季度总收入达90.4亿元 净亏损2400万元
- 博客从 WordPress 迁移至 Halo
热门文章
- Git的pull clone fetch
- 监控操作系统和服务器,LoadRunner如何监控不同操作系统的服务器?
- PHP被忽视的编码规范
- vhd 镜像 备份Linux,差分VHD 系统秒备份、秒还原教程 完胜GHOST
- html文字图片同一行,CSS控制图片和文字在同一行显示且对齐的3种方法
- java回调如何理解_如何理解java中的回调
- 视觉错觉模型_有才!将立体模型涂改伪装成平面二次元,视觉错觉玩法在日本风靡...
- mysql 5.6 缓存_为什么默认情况下从MySQL 5.6开始禁用query_cache_type?
- Eureka修改实例名称
- 对VOC目标检测数据进行增强