2011-09-24 38 views
10

我想git diff输出我所有文件的规则差异,除了* .tex。对于* .tex文件,我希望看到git diff --word-diff的输出。使用git的文字差异胶乳文件

我当时玩的是.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

你是怎么想出“$ 2”和“5 $”?我无法在任何地方找到相关信息。 – silvenon

+0

找到了,对不起。对于想知道的其他人,请在[git手册页](http://git-scm.com/docs/git)中搜索GIT_EXTERNAL_DIFF。 – silvenon

+0

作为一个方面的评论,有[应该](http://git-scm.com/docs/gitattributes/1.9.0#_defining_a_custom_hunk_header)一个内置的差异模式“tex”可用,应该给你合理的大块-headers。但这似乎并不适用于我。 –

回答

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 
+0

这是我得到的确切错误信息。添加'退出0'做了窍门,谢谢! –