git smart line and word diff



我想要git diff并将常规的逐行差异与git diff --word-diff结合起来。逐行差异的问题在于,如果我更改了一两个单词并保持该行基本完整,那么它们就没有必要了——分块太粗糙了。另一方面,如果我改变整行并使用--word-diff,有时diff算法会感到困惑,并吐出令人难以置信的令人困惑的diffs,插入和删除许多单词以"变形"一行到另一行。

是否有一种方法可以指定git应该是聪明的,只有--word-diff,如果它实际上是有意义的这样做(在逐行基础上,当然)?

我发现git diff --word-diffgit diff --color-words最聪明的事情是git附带的预定义模式(如--word-diff-regexdiff.wordregex中使用的)。它们可能不完美,但在AFAICT中给出了相当好的结果。

.gitattributes的文档中给出了预定义的diff驱动程序列表(它们都有预定义的单词正则表达式)。

你仍然需要通过.gitattributes

来启用属性机制。
因此,要激活所有*.py文件的python模式,可以在repo根目录下发出以下命令:
echo "*.py diff=python" >> .gitattributes

如果您对不同的预设模式实际看起来像什么感兴趣,请查看git的源代码

最新更新