git diff 左侧显示行号(格式化输出)

1、问题描述

我用git diff命令查看代码做了哪些修改时,发现显示的排版不符合我的预期,我希望能在排版左边显示删改的具体行号,且不同的文件的修改分隔开。

2、环境

  • 操作系统:Ubuntu 18.04.5 LTS
  • Git版本:git version 2.17.1

3、效果

我写了一个git-diff-lines命令,代替git diff命令,先看对比效果
在这里插入图片描述
在这里插入图片描述

git-diff-lines命令比起git diff命令排版上的优点:可在界面左侧显示具体修改了哪个文件的哪一行,视觉上更直观,且只显示添加/删除/修改的行,而不显示周围的上下文

4、实现

写一个格式化git diff输出的脚本git-diff-lines,并将脚本添加到环境变量里去,查看本机环境变量的路径用echo $PATH命令

wangtao@DESKTOP-1D526UH:~/work$ vim git-diff-lines
#!/bin/bash
diff-lines() {
        local path=
        local pathOld=
        local line=
        while read; do
                esc=$'\033'
                if [[ $REPLY =~ ---\ (a/)?.* ]]; then
                        continue
                elif [[ $REPLY =~ \+\+\+\ (b/)?([^[:blank:]$esc]+).* ]]; then
                        path=${BASH_REMATCH[2]}		#获取文件路径
                elif [[ $REPLY =~ @@\ -[0-9]+(,[0-9]+)?\ \+([0-9]+)(,[0-9]+)?\ @@.* ]]; then
                        line=${BASH_REMATCH[2]}		#获取添加/删除/修改的行
                elif [[ $REPLY =~ ^($esc\[[0-9;]+m)*([\ +-]) ]]; then

                        if [ "$path" != "$pathOld" ]; then
                                echo -e "\n\n$path:$line:$REPLY"	#不同文件间的修改用换行隔开
                        else
                                echo "$path:$line:$REPLY"
                        fi

                        if [[ ${BASH_REMATCH[2]} != - ]]; then
                                ((line++))
                        fi
                        pathOld=$path
                fi
        done
}

if [ "$1" != "" ]; then		#可查看单个文件的差异(方法:git-diff-lines  xxx.c)
        git diff -U0 --color=always --  "$1" | diff-lines
else
        git diff -U0 --color=always | diff-lines
fi
wangtao@DESKTOP-1D526UH:~/work$ chmod a+x git-diff-lines
wangtao@DESKTOP-1D526UH:~/work$ sudo cp git-diff-lines /usr/local/sbin

以后在代码工程任何目录下敲git-diff-lines命令,就能格式化输出代码修改差异啦!

参考
[1]: https://cloud.tencent.com/developer/ask/85412

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值