git diff 规定文件之间有额外的空行

git diff dictate extra blank line between files

有什么方法可以指定 git diff 输出的格式吗?当有多个文件时,我希望在每个文件开始之前有一些额外的空行——也就是说,在每次它说

之前
diff --git a/filename b/filename

这将帮助我找出各个文件。现在我正在进入 BBEdit,然后进行全局查找和替换,它很快就变旧了。我真的不需要在这里使用 diff 工具,我想;我只想稍微控制一下文本输出。 (告诉我如何将其通过 sed 或其他方式进行传输可能会很酷,尽管我有点希望 git diff 本身可以接受某种格式选项。)

这是一个使用 sed 和 bash/zsh 的答案(作为回答 here):

# include a '\' followed by a linefeed ('\n') in the replace pattern of sed :
git diff --cached | sed -e 's/^diff --git/'$'\\ndiff --git/'

(注意:上面命令的 bash/zsh 特定部分位于用于在命令行上插入实际 \<lf> 的语法中:$'\\n' 将转换为 bash/zsh 中的那个,但可能不会转换为其他 shells -- 例如:cmd.exe 或 powershell。您可以选择另一种插入方式sed 模式中的 \<lf>,例如通过从文件而不是命令行读取模式,或者通过选择 shell 特定方式在命令行中插入这些字符)


如果您想保留 git diff 显示的颜色,一种方法是:

git diff --cached --color=always |\
    # spot the escape sequence that sets "diff --git" in bold, and print it in the output
    sed -e 's/^\(..1m\)diff --git/'$'\\n\1diff --git/'