2011-09-24 43 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'做了竅門,謝謝! –