利用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 信息 和日期,点开可以看到差别。

示例图片

posted @ 2019-07-27 16:57  名白  阅读(310)  评论(0编辑  收藏  举报