我希望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"
答案 0 :(得分:6)
你可以发布(或链接)一个完整的例子吗?我已经准确地设置了你所描述的内容,它似乎工作得很好。也就是说,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