【问题标题】:git smart line and word diffgit smart line 和 word diff
【发布时间】:2014-10-07 13:31:21
【问题描述】:

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

有没有办法指定git 应该对此很聪明,并且只有--word-diff 这样做才有意义(当然是逐行)?

【问题讨论】:

  • 你是配置diff.wordRegex还是使用--word-diff-regex?我目前使用[A-Za-z0-9_]+|[^A-Za-z0-9_],它非常适合增量更改,但对于完全重写它会变得很疯狂。我想知道同样的事情。也许有一些正则表达式可以做到这一点,但我还没有弄清楚。
  • 嗨@JosephK.Strauss,在审查了您的编辑并注意到它被OP 接受后,我仔细研究了这个问题。请注意,我和另一位审阅者投票拒绝了您的编辑,因为问题或编辑描述中没有表明需要对其进行分类 [regex]。现在,看到您的评论,更清楚该标签可能适用。将来最好在您的编辑建议摘要中详细说明,因为我们在审核时看不到这些 cmets。

标签: regex git diff line-by-line word-diff


【解决方案1】:

我为git diff --word-diffgit diff --color-words 找到的最聪明的东西是git 附带的预定义模式(在--word-diff-regexdiff.wordregex 中使用)。它们可能并不完美,但 AFAICT 给出了相当不错的结果。

docs for .gitattributes 中给出了预定义差异驱动程序的列表(它们也都具有预定义的单词正则表达式)。进一步说明

你仍然需要通过 .gitattributes 使用属性机制来启用它

因此,要为所有 *.py 文件激活 python 模式,您可以在您的 repo 根目录中发出以下命令:

echo "*.py diff=python" >> .gitattributes

如果您对不同预设模式的实际外观感兴趣,请查看git's source code

【讨论】:

  • gasp 没有 javascript :(
猜你喜欢
  • 2018-08-10
  • 2011-12-04
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2020-08-28
  • 2015-08-06
相关资源
最近更新 更多