如何在Git仓库之外使用`git diff --color-words`?

76
我如何在Git之外获得类似于 git diff --color-words 的输出?
最接近的方法是使用 wdiff -t,但它会用下划线/反转而不是绿色/红色颜色,并且不允许指定我的空格正则表达式。
5个回答

129
git diff --color-words --no-index old.txt new.txt

8
从 manpage 上来看,“如果刚好给出两个路径,而且至少有一个路径不在当前版本库内,git diff 命令会比较这两个文件/目录。使用 --no-index 参数可以强制该行为。”(很多时候,甚至不需要使用 --no-index 参数)。 - Cascabel
1
至少在我的git 1.9.3中,顺序应该是git diff --no-index --color-words - PhML
3
在我的git v1.9.3版本中,--no-index--color-words的顺序并不重要...(实际上我现在找不到没有使用--no-index的情况下失败的案例)。 - Vi.
1
非常好。也许我们可以添加一个别名 alias diff="git diff --no-index" - Penghe Geng

8
根据Jefromi的评论,您可以直接使用。
git diff --color-words file1 file2

可以在git仓库之外使用。


5
在上述两个任意文件上,使用 git diff 无法起作用(git 版本为1.7.4)。虽然 git diff --color-words --no-index <file1> <file2> 可以工作,但正确的方法是使用 wdiff,该工具专门用于比较文本差异(http://www.gnu.org/software/wdiff/)。 - Manu Manjunath
2
@Manu 不,git diff 就是为了这个目的而设计的。wdiff 只是一个hack。有时间可以阅读一下你提供的链接。 - Zenexer
git diff非常出色,但上面提到的wdiff页面并没有说它是一个hack。根据链接在该页面上链接的自己的文档,wdiff“已经相当成熟”:https://www.gnu.org/software/wdiff/manual/wdiff.html - Joshua Goldberg

3

Git版本1.9.1:

git diff --word-diff=color 文件A 文件B

这个命令可以比较两个文件的不同之处,并使用颜色标记出单词级别的差异。

1
如果我在一个 git 仓库中 (git v2.3.3):
  • git diff --color-words 不起作用(没有输出)
  • git diff --no-index 不接受 --color-words--color 参数

可以使用 wdiff,配置为使用颜色,而不是下划线:

wdiff -n \
  -w $'\033[30;31m' -x $'\033[0m' \
  -y $'\033[30;32m' -z $'\033[0m' \
  … | less -R

来源:https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html(修改为使用前景色而不是背景色)

希望能有所帮助。


为什么 git --no-index --color-words 失败了?我以前用过它(虽然是早期的 Git 版本)。 - Vi.

1

你可以使用 git diff --color=always --color-words 命令,这将在输出中给你颜色转义代码。但你需要一些 shell 来解释颜色代码...


这个问题涉及如何在Git仓库之外使用它。同时,当使用--color-words=always而不仅仅是--color-words时,会有一些东西被遗漏。 - Vi.
@vi:抱歉,你只说了“在git之外”,但没有提到任何存储库。我以为这是关于在除git之外的其他应用程序中拥有颜色(例如管道)- 这也是“在git之外”的意思,即“不在默认的git工具链/工具集内”。 - knittl

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