Git: 如何用任意字符替换 diff 的 ANSI 颜色?

Git: how to replace ANSI colors for diff with arbitrary characters?

我想保存

的输出
git diff HEAD^1 --word-diff=color

在 markdown 文件中,这样 "old" 单词被标记为 ~~old~~ 导致 oldnew 一旦转换为 HTML .

当然,通过一个脚本来传输输出并没有太大的障碍,该脚本将用我需要的任何内容替换 ANSI 转义码。但是,我想检查一下,是否有一个选项可以在 git 本身中以某种方式配置它。尝试在 git 配置中仅指定我需要的字符会导致错误,这并不奇怪。

我相信将以下行添加到 [alias] 部分。gitconfig 将在 linux系统:

diffmd = "!f() { git diff --word-diff=plain  |  sed 's/{+//g' | sed 's/+}//g'  | sed 's/\[-/~~/g'  | sed 's/-\]/~~/g' ; } ; f"

然后您可以将其用作 git diffmd HEAD^


解释:

这里我们基本上将 bash 函数的定义和调用包装在 git 别名中。

git diff 选项 --word-diff=plain 将 ANSI 颜色更改替换为字符串“[-”、“-]”、“{+”和“+}”。

在此用例中,“$1”被替换为 "HEAD^"。

我们使用sed将“[-”和“-]”替换为“~~”,将“{+”和“+}”替换为空