我经常用来git diff --name-status BRANCH_NAME
获取已修改文件的列表。是否可以对该命令的输出进行着色,类似于git status
- 绿色表示添加的文件,蓝色表示修改,红色表示删除等。
它不是重复的如何对 git 的输出进行着色?因为我想对输出的不同部分进行着色,并且建议的配置文件中的更改不适用
答案1
我不知道有任何官方方法可以做到这一点,但我刚刚写了这篇文章,它对我有用。
将下面的 bash 脚本放入一个名为:(color_git_diff.sh
或任何你想要的)的文件中
#!/usr/bin/env bash
for i in "$@"
do
if grep -q "^M" <<< "$i"
then
echo -e "\e[33m $i \e[0m"
elif grep -q "^D" <<< "$i"
then
echo -e "\e[31m $i \e[0m"
fi
done
要应用脚本,您可以使用以下方式调用它:
git diff --name-status | xargs --delimiter="\n" ./color_git_diff.sh
显然你不想每次都调用它,所以你需要将它放入你的bashrc
并为其分配一个函数或别名 - 或类似的东西。
这只会为修改或删除的文件生成彩色输出,并且我将修改后的文件设置为黄色 - 我不知道我头顶上的蓝色的 ansi 转义码是什么 - 我想也许吧\e[36m
?无论如何,如果你想使用它,你可以自己添加 -
答案2
我想提供一种稍微更新的方法来执行此操作,原因很简单,当我尝试主要答案时,它速度慢得令人难以忍受,输出行之间几乎有一秒钟。这可能是由于在 Windows 上运行 git 而不是在 *nix 机器上运行,但“grep”命令需要很长时间才能有效。话虽如此,给定两者的“--name-status”参数的输出,可以实现相同的效果git 日志和git 差异是简单的字符串,因此使用简单的字符串匹配而不是“grep”工具,我的输出几乎是立即的。
for i in "$@"
do
if [[ ${i:0:1} == "M" ]] #grep -q "^M" <<< "$i"
then echo -e "\e[34m $i \e[0m"
elif [[ ${i:0:1} == "D" ]] #grep -q "^D" <<< "$i"
then echo -e "\e[31m $i \e[0m"
elif [[ ${i:0:1} == "A" ]] #grep -q "^A" <<< "$i"
then echo -e "\e[32m $i \e[0m"
else echo -e "$i"
fi
done
我还添加了“添加”的代码以及默认值,因此如果有其他文本(如 git log --pretty),它将不会被忽略。
Jaeden "Sifo Dyas" al'Raec Ruiner
PS - 使用相同的 xargs 命令和分隔符,但上面的脚本解析速度比 grep 更快(在 Windows 盒子上)
答案3
这是做同样事情的另一种方法。它使用一个“sed”命令处理所有行。
color_git_diff.sh:
#!/bin/bash
sed $'
s/^M/\033[33mM/
s/^A/\033[32mA/
s/^D/\033[31mD/
s/$/\033[0m/'
您可以像这样使用它:
git diff --name-status | ./color_git_diff.sh
答案4
尝试下一个命令:
vimdiff [file1] [file2]