zoukankan      html  css  js  c++  java
  • 利用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 信息 和日期,点开可以看到差别。

    示例图片

  • 相关阅读:
    Java WebSocket生命周期
    软件网络总结
    js模态弹窗
    spring boot
    spring aop
    lvs分布式
    如何在大牛面前装逼
    Java学习的思考
    javase知识点
    <nginx+PHP>nginx环境下配置支持php7
  • 原文地址:https://www.cnblogs.com/mingbai/p/11253639.html
Copyright © 2011-2022 走看看