Git智能行和单词差异

5
我想使用git diff命令,将普通的逐行差异与git diff --word-diff命令相结合。逐行对比存在一个问题,如果我只修改了一两个单词而大部分行保持不变,则逐行差异会显得不必要——切块过于粗糙。另一方面,如果我更改了整行并使用 --word-diff,有时候差异算法会感到困惑并输出非常混乱的差异,插入和删除了大量单词以将一行“变形”成另一行。
是否有一种方法指定git应该聪明地做出判断,并仅在实际上有意义(基于逐行基础)时才使用--word-diff

2
你是否配置了 diff.wordRegex 或使用了 --word-diff-regex?我目前使用的是 [A-Za-z0-9_]+|[^A-Za-z0-9_],它对于增量更改非常有效,但对于完全重写则会出现问题。我也在想同样的事情。也许有一些正则表达式可以实现这个功能,但我还没有找到。 - Joseph K. Strauss
2
嗨@JosephK.Strauss,在审查您的编辑并注意到它被OP接受后,我仔细查看了问题。请注意,我和另一位评审人投票拒绝了您的编辑,因为问题或编辑说明中没有表明需要将其分类为[regex]。现在,看到您的评论,标签可能适用更清楚了。将来,在编辑建议摘要中详细说明是个好主意,因为我们在审查时无法看到评论。 - Air
1个回答

5
我发现对于git diff --word-diff或者git diff --color-words,最聪明的做法就是使用git提供的预定义模式(在--word-diff-regexdiff.wordregex中使用)。虽然它们可能不完美,但据我所知,它们可以得到相当好的结果。
.gitattributes文档中列出了一系列预定义的diff驱动程序(它们也都有预定义的单词正则表达式)。此外还指出:

你仍然需要通过属性机制在.gitattributes中启用此功能

因此,要为所有*.py文件激活python模式,您可以在存储库根目录中输入以下命令:
echo "*.py diff=python" >> .gitattributes

如果你想了解不同的预设模式实际上看起来是什么样子,可以查看Git源代码


倒吸一口气 没有 JavaScript :( - Henry Blyth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接