利用git 找到应该对问题代码负责的人--代码定责
场景
有时候突然发现 某部分代码存在明显的问题,代码作者的态度需要调整。 或者发现某些代码存在特意留下的bug或漏洞,代码作者需要出来担责。 这时候我们就需要找出来 需要为有问题代码承担责任的同事,或者前同事,不能让他挖个坑还能那么潇洒。
方法
1,git log fileName 查看 commit 信息 找相关的
主要是对比commit 信息
很简单,直接执行 git log fileName 命令即可查看文件相关commit 历史,大概如下边这样
commit 261cb112df61d728e62219ccf09c477242cdc11b
Author: liugjie <liusie@t2cld.net>
Date: Sat Dec 8 19:35:26 2018 +0800
add cofig file
commit 6b6686e9cd13fcd5f6d7787dad1e55ef3bfef9bb
Author: mingbai <lngjie@t2cld.net>
Date: Fri Nov 16 20:38:11 2018 +0800
add nav,resume func
然后 用 git diff commi1,commit2 即可查看两个commit 之间的修改。
2,log -p 查看文件的修改历史,
此命令 主要是查看文件的修改细节
直接执行 log -p fileName , 即可查看某一个文件的修改历史。这个命令会 分commit 展示各个commit的修改,其结果大致如下:
commit 5c736956bcf1354a4ed892a424d48f621d1f19cc
Author: liushengjie <ligjie@xm.com>
Date: Tue Jun 11 17:27:12 2019 +0800
change test func , and fix some bug
diff --git a/controllers/channel/save.go b/controllers/channel/save.go
index 2976913..209549a 100755
--- a/controllers/channel/save.go
+++ b/controllers/channel/save.go
@@ -26,7 +26,7 @@ func (p *Channel) save(ctx *xcontext.XContext) (result interface{}, code int, er
return nil, 400, errors.New(xbase.LogFatalChannel("secret name already exist ! "))
}
- exist, err = model.CheckExistForCreateChannel(nsqUser.ClusterId, nsqUser.Topic.TopicName, nsqUser.ChannelName)
+ exist, err = model.CheckExistForCreateChannel(nsqUser.ClusterId, nsqUser.TopicId, nsqUser.ChannelName)
if err != nil {
return nil, 500, errors.New(xbase.LogFatalChannel("check channel exist err , ", err.Error()))
}
commit 6aad0acde3b83a34bdc2b76a12fe0e9b8a692bdb
Author: ljie <liusie@xi.com>
Date: Mon Jun 10 21:42:23 2019 +0800
refactor table nsqUser,change relevant code
diff --git a/controllers/channel/save.go b/controllers/channel/save.go
index 2abeeee..2976913 100755
--- a/controllers/channel/save.go
+++ b/controllers/channel/save.go
@@ -26,7 +26,7 @@ func (p *Channel) save(ctx *xcontext.XContext) (result interface{}, code int, er
return nil, 400, errors.New(xbase.LogFatalChannel("secret name already exist ! "))
}
- exist, err = model.CheckExistForCreateChannel(nsqUser.ClusterName, nsqUser.TopicName, nsqUser.ChannelName)
+ exist, err = model.CheckExistForCreateChannel(nsqUser.ClusterId, nsqUser.Topic.TopicName, nsqUser.ChannelName)
if err != nil {
return nil, 500, errors.New(xbase.LogFatalChannel("check channel exist err , ", err.Error()))
}
3, git blame -L beginline,endline fileName
此命令,可以针对特定文件里的 某几行。
执行 git blame -L beginline,endline fileName 后,会仅显示 beginline 和 endline 之间的行相关 的修改历史commie,其结果大致如下:
fd208ce1 (liujie 2019-05-31 15:08:20 +0800 21) beego.Router("/auth", &auth.Auth{}, "*:Query")
50c6539b (liujie 2019-05-28 20:31:05 +0800 22)
5c736956 (liushengjie 2019-06-11 17:27:12 +0800 23) beego.Router("/channel/delete/:topicName/:id", &channel.Channel{}, "*:Delete")
5c736956 (liujie 2019-06-11 17:27:12 +0800 24) beego.Router("/channel/query/:clusterId/:topicId", &channel.Channel{}, "*:Query")
(END)
然后git show 相应的commit id ,即可完整的变更历史。
4, 利用IDE里的git,界面化操作
这个背后的操作与1 是一样的,只不过界面化了
一些 IDE 会集成git明亮,对某一个文件 右键可能会有 git history 或者 类似的选项。展开以后一般会有 该文件的 commit 信息 和日期,点开可以看到差别。
利用git 找到应该对问题代码负责的人--代码定责的更多相关文章
- Git学习:利用Git和TortoiseGit把代码传输到网络服务器
版本控制这块,一直用SVN.感觉挺好用,比VSS要好用些.不过,近期在网上,又谈到时下很流行的Git.就想看看Git到底是何方神圣.趁着五一在家无事,就静下心来,简单研究一下. 当下,网络上提供的基于 ...
- FastAdmin 是如何利用 Git 管理插件代码的?
FastAdmin 是如何利用 Git 管理插件代码的? 由于 FastAdmin 的插件很多,如果每一个插件用一个项目来管理,可以倒是可以,但是项目还多了. 但是如果使用文件夹在同一级的的方式又不方 ...
- 利用Git钩子实现代码发布
目录 1.什么是git钩子 2.安装一个钩子 3.常用的钩子脚本类型 3.1 客户端钩子 3.1.1 pre-commit 3.1.2 prepare-commit-msg 3.1.3 commit- ...
- AndroidStudio中利用git下载github或者git.oschina的代码时报错:repository test has failed解决方法
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing AndroidS ...
- git使用方法----如何利用git管理代码?如何使用git将代码传到github中去
## 在文件夹中打开 git here; 1.git init ===初始化一个仓库(这个仓库会存放,git对我们代码进行备份的文件)2.配置个人信息 -- --在git中设置当前使用的用户是==( ...
- 如何利用Git生成pitch和打pitch
利用Git生成和应用patch 在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情. 什么是patch?简单来讲,patch中存储的是你 ...
- 利用Git进行团队协作
前言: 这里简单介绍一下Git的历史. 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了 ...
- Visual Studio C# 利用git和github协同开发时产生冲突的解决办
Visual Studio C# 利用git和Github协同开发时产生冲突的解决办法 前言:在前两天的助教作业中,发现了自己没有办法解决在用vs开发C#的窗体项目的过程中产生的冲突问题,在查阅了资料 ...
- 利用git+hugo+markdown 搭建一个静态网站
利用git+hugo+markdown 搭建一个静态网站 一直想要有一个自己的文档管理系统: 可以很方便书写,而且相应的文档很容易被分享 很方便的存储.管理.历史记录 比较方面的浏览和查询 第一点用M ...
随机推荐
- java多线程之多生产者-多消费者
多生产者和多消费者是线程通信的经典案例,但是和生产者-消费者相比更为复杂,而且可能会产生程序假死. public class Product { private MyStack myStack; pu ...
- HTML连载16-颜色控制属性2&标签选择器
一.颜色控制属性(上接连载15) (4)十六进制 在前端开发中通过十六进制来表示颜色,其实本质就是RGB,十六进制中是通过每两位表示一个颜色. 例如:#FFEE00,其中FF代表的是R,EE代表的G, ...
- .Net for Spark 实现 WordCount 应用及调试入坑详解
.Net for Spark 实现WordCount应用及调试入坑详解 1. 概述 iNeuOS云端操作系统现在具备物联网.视图业务建模.机器学习的功能,但是缺少一个计算平台产品.最近在调研使用 ...
- 03、MySQL—数据表操作
1.创建数据表 基本语法:create table 表名(字段名 字段类型 [字段属性], 字段名 字段类型 [字段属性],…) [表选项] 范例:创建数据表 以上错误说明:表必须放到对应的数据库下: ...
- 【转+存】JVM指令集
jvm指令集: 转载地址:https://www.cnblogs.com/yaoyinglong/p/4300447.html 一.未归类系列A 此系列暂未归类. 指令码 助记符 ...
- Axure中怎么制作锚点
实现目标 点击导航条不同的菜单,页面跳到菜单相应的位置,实现页面自动滚动. 1. 拖入编辑区3个矩形,并相应命名为菜单1,菜单2 ,菜单3: 2. 再新建3个想要制作的文本框准备进行锚点滚动: 3 ...
- if语句简单练习
input练习 # -*-coding:utf-8 -*- # import getpass 隐藏只能在cmd中使用 user=input("请输入账号:") password=i ...
- Linux/windows com串口 java 接收数据 并解析 web程序
1.首先应公司要求再 com 口本来使用 .net 由于 .net 适用 linux 太麻烦 改为java 准备工作 准备 RXTXconmm.jar(版本很重要) 因为版本问题我搞了一天. 主要讲述 ...
- java-IO各个区别
BIO:JDK1.4以前用的都是BIO,阻塞IO. 阻塞到我们的读写方法.BIO,如果有一台服务器,能承受简单的客户端请求,那么使用io和net中的同步.阻塞式API应该是可以实现了.但是为了一个用户 ...
- Codeforces 755C:PolandBall and Forest(并查集)
http://codeforces.com/problemset/problem/755/C 题意:该图是类似于树,给出n个点,接下来p[i]表示在树上离 i 距离最远的 id 是p[i],如果距离相 ...