使用Git的单词差异功能来比较LaTeX文件。

10
我想让git diff为除*.tex文件外的所有文件输出常规差异。对于*.tex文件,我希望看到git diff --word-diff的输出。

我试着调整.gitattributes.gitconfig,但最远只能得到一个.tex文件的部分显示,然后就崩溃了。这种行为可能吗?

我的.gitattributes:
*.tex diff=latex

.gitconfig

[diff "latex"]
    wordRegex = "\\\\[a-zA-Z]+|[{}]|\\\\.|[^\\{}[:space:]]+"
    command = ~/bin/word-diff.sh

以及 word-diff.sh

#!/bin/sh 
git --no-pager diff --color-words "$2" "$5"

你是怎么想到使用"$2"和"$5"的?我在任何地方都找不到相关信息。 - silvenon
找到了,抱歉。对于其他想知道的人,请在 git man page 中搜索 GIT_EXTERNAL_DIFF。 - silvenon
顺便提一下,在GIT官方文档中有一个内置的diff模式“tex”,它应该会为你提供合理的hunk-header。但是在我的情况下似乎无法使用。 - Richard Kiefer
1个回答

6

你能发布一个完整的例子(或链接到)吗?我已经按照你描述的设置好了,看起来一切正常。也就是说,diff输出会突出显示单词而不是行,并且我所做的所有更改都已包括在内(也就是说,它没有提前停止或出现任何问题)。唯一的异常是diff总是以以下方式退出:

external diff died, stopping at foo.tex.

这是因为您使用的方式运行git diff表现得像独立的diff工具:如果文件不同,它将以非零退出代码退出。Git并不希望出现这种行为;它假设您的自定义命令总是能够成功执行,并且错误退出代码表示实际问题。
Git已经知道文件的不同之处,不需要外部命令进行确定。外部命令严格来说只是一个格式化工具。
如果您修改diff-words.sh脚本,使其始终成功退出,那么事情应该会更顺利。
#!/bin/sh
git --no-pager diff --color-words "$2" "$5"
exit 0

那就是我收到的确切错误信息。添加 exit 0 就解决了,谢谢! - Nikola Knezevic

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