git smart line和单词差异

Pyt*_*Nut 5 regex git diff line-by-line word-diff

我想git diff将常规逐行diff与结合在一起git diff --word-diff。逐行比较的问题在于,如果我更改一个或两个单词并使该行基本保持原样,则它们是不必要的-分块过于粗糙。另一方面,如果我改变整行并使用--word-diff,有时diff算法将变得混乱并吐出令人难以置信的diff,插入和删除了大量单词以将一行“变形”为另一行。

是否有一种方法可以指定git应该对此明智的方法,并且仅--word-diff在这样做确实有意义时(当然,逐行)?

rap*_*sse 5

我已经找到了最聪明的事git diff --word-diff或者git diff --color-words预定义模式来与git的(如在使用--word-diff-regexdiff.wordregex)。它们可能并不完美,但 AFAICT 给出了相当好的结果。

(他们都已经预定的字正则表达式太)预定义的差异驱动程序的列表中给出的文档进行.gitattributes。进一步指出,

您仍然需要通过 .gitattributes 使用属性机制启用此功能

所以要激活python所有*.py文件的模式,你可以在你的 repo root 中发出以下命令:

echo "*.py diff=python" >> .gitattributes
Run Code Online (Sandbox Code Playgroud)

如果您对不同的预设模式的实际外观感兴趣,请查看git 的源代码