2011-09-24 9 views
10

git diffは* .texを除くすべてのファイルに対して標準の差分を出力したいと思います。 * .texファイルの場合、出力はgit diff --word-diffです。gitのword-diffをlatexファイル用に使用する

私は.gitattributes.gitconfigで遊んでいましたが、もっとも遠いのは1つの.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 man page](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)ビルトインのdiffパターン "tex"がありますヘッダー。しかし、それは私にとってはうまくいかないようです。 –

答えて

6

は、あなたが完全な例(またはリンクに)投稿することができますか?私はあなたが何を記述したかを正確に設定しており、うまくいくと思われます。つまり、diffの出力では、行ではなく単語が強調表示され、変更した内容がすべて含まれていました(つまり、早い段階で何かを吐いてしまうことはありませんでした)。それは、ゼロ以外の終了コードで終了します。あなたはそれを使用しているどの方法で実行git diffは、スタンドアロンdiffツールのように振る舞うので

external diff died, stopping at foo.tex. 

これが起こる:唯一の異常は、とのdiffなり、常に出口があることでしたファイルが異なる場合。 Gitはこの動作を期待していません。カスタムコマンドが常に正常に実行され、そのエラー終了コードが実際の問題を示していることが前提です。

Gitは、ファイルが違いであることを既に知っており、この決定を行うために外部コマンドを必要としません。外部コマンドは、厳密には書式設定ツールです。

あなたは常に正常終了するためにあなたのdiff-words.shスクリプトを変更した場合、物事が良く出て動作するはず:

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

それは私が得た正確なエラーメッセージでした。 'exit 0'を追加すると、そのトリックはありました、ありがとう! –

関連する問題