2013-03-07 4 views
7

私はファイルを編集しているとしましょう。ファイルを保存すると、git-diffは私にそのインデックスに関連した変更を与えるでしょう。私は、ファイルを最初に保存せずに、インデックスに関連した変更を取得したいと思います。標準入力に対してファイルをgit-diffすることはできますか?

保存されていない変更を一時ファイルに書き込む(つまり、別の場所に保存する)か、別の一時ファイル(git show :file > tempfile2)、次にgit-diff tempfile tempfile2に書き出します。しかし、それは優しくないようです。

良い方法がありますか?

+1

なぜファイルを保存しないのですか?それに対して何が語られますか? –

+2

パイプを使用するだけでファイルを保存しない方がいいでしょう。 –

+0

@AndyStewart:なぜそれは素晴らしいですか? tmpにファイルを投げるだけです。それは難しくない、それは多くの仕事ではない...確かにgitの要件を回避しようとするよりもずっと少ない(しかしAsh Berlinの答えを参照)。 – siride

答えて

2

灰ベルリンの答えを改善する。

これにより、git-diffの優れた機能を使用できます。

​​

一時ファイルに書き込む必要があるため、これはまだ便利ではないことに注意してください。ファイルを保存するまで、変更はディスクにはまったく(インメモリのみ)、またはエディタに依存する何らかの種類の一時ファイルにはありません。 Vimがこれをシームレスに1つのステップで実行できる可能性はありますが、私は十分に身近ではありません。

+0

Vimでは、呼び出されている外部コマンドの標準入力にコンテンツを渡すことができます。ですから、ファイルのインデックスバージョンを一時ファイルに書き込み、メモリ内ファイルをstdinに渡します: 'git show:file> tmpfile && git diff-tmpfile -'。 –

+0

また、ファイルパスの一方または両方がgit repoの外側にある場合、 '--no-index'が自動的に推定されます。 –

8

git 1.5.1ので、標準入力に対する差分にオプションがあった - それはちょうどもう少しこれで遊んで

$ echo foo | git diff --no-index -- my_file -

を文書化されていない私は、これはOP(またはI)が何を望むかではないかもしれません実現 - stdinへのファイルの最後にコミットされた状態ではなく、stdinにファイルの現在の状態を比較します。このような何かが、これはあなたのgit configにいくつかの設定をピックアップしていない可能性があります直接差分呼び出す意味は注意

$ echo foo | diff -u <(git show :my_file) -

ことを行います。基本的にamsが彼の答えで言うように。