2016-11-21 6 views
2

私がgit diffを実行すると、存在しないファイルで私のdiffツールを起動しようとします。私はそれが変更された.gitignoreファイルの最後のバージョンを取得していると仮定し、それを一時ファイルにコピーします。だから私はそれが起動を参照してください。git diffは存在しないファイルを比較しようとします

"C:\Program Files\Git\usr\bin\diff.exe" .gitignore C:/temp/D4Sgyb_.gitignore 55f1.... 100644 .gitignore 000.... 100644 

しかし、差分ツールはC:/temp/D4Sgyb_.gitignoreが存在しないことを、当然のように、文句を言います。あまりに早く作成されていないか、削除されていませんか?

+0

通常、 'git diff'は独自の内部diffを行いますが、他のプログラムを使用するよう指示している場合、この" external "diffを7つの引数で呼び出します:* path old-file old-hex old-mode new -file new-hex新しいモード*。これは外部差分の開始と思われる。 https://www.kernel.org/pub/software/scm/git/docs/git.html#_git_diffs – torek

+0

を参照してください。ただし、外部ツールに渡す一時ファイルを作成できないようです。興味深いもの: – Marc

+0

Gitは、外部プログラムが終了すると即座に一時ファイルを削除する、つまり終了し、プロセスはGitによって収集されることになる(そしてコードはこれを行うために書かれています)。私はWindowsをやっていないが、Unix/Linuxの「二重フォーク」に相当するものがあるだろうか?それとも、Windows Gitのバグで、一時ファイルを作成できなかったことに気付かずにいます。 :-) – torek

答えて

0

すべてのファイルが圧縮されています。したがって、作業ディレクトリにないファイルを比較する場合は、このファイルを一時ディレクトリに展開する必要があります。

あなたのC:/ tempディレクトリが存在しないか、完全にアクセスできない(またはいくつかのウイルス対策ソフトウェアがこのファイルを削除している)かもしれません。私は、 "C:/ temp"は現代のWindowsの悪い道だと信じています。 PATH環境を確認してください。

+0

実際には 'c:\ temp'ではなく、ユーザの'%temp% 'フォルダです。私はちょうどそのデータを匿名化しました。私は実際にフォルダへの権利を持っています。 – Marc

+0

内部diffユーティリティやその他のアプリを使用していて、それを「匿名化」していますか? – KoVadim

+0

私はもともとは行いましたが、git diffツールに戻って、それが役立つかどうかを確認しました。上の例は実際に私が使用しているdiff.exeへのパスです。 – Marc

関連する問題