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