私の理解では、git は基本的に、コミットを作成するときに diff を実行します。
少なくとも、それは真実ではありません。コミットするとき、Git は単に現在のインデックスをそのまま正確にアーカイブします。コミットには差分はありません。むしろ、コミットを実際に表示するたびに動的に生成されます。
したがって、ある意味では、あなたも間違った考えを持っています。で最後のコミットを表示するとgitk
、gitk
実際に実行git diff
されて、表示されているものが生成されます。そのため、それほど遅くない場合は、git diff
単に遅くはありません。:)
現在の作業ツリーの差分を作成するのが遅い場合、それは何よりもファイルシステムに問題があると思われます。遅いと感じたことは一度もありませんし、NFS も使用しています。(したがって、ファイルシステムがそれよりもはるかに遅くなる方法をよく理解していないことを認めなければなりません。)
gitk
または、ビットが遅いだけかもしれません。リポジトリの現在の状態を確認するためにあまり使用したことはありません。通常はgit status
、git diff
および/またはgit gui
代わりに使用します。(私は を使用しますgitk
が、ほとんどは履歴および/または履歴コミットを表示するためだけです。)
いくつかのヒント:
gitk
毎回再起動するのではなく、バックグラウンドで実行したままにします。
- 実行
git diff
自体が開始と同じくらい遅いかどうかを確認しgitk
ます。
- 念のため、a を実行し
git gc
てリポジトリを最適化します。
編集: Windows 7 を使用していると述べたので、Linus が Git の設計についてコメントする際に引用したことを言及する必要があります。 Gitの。したがって、作業ツリーとインデックスの比較が遅い理由は、Windows 7 のファイルシステム呼び出しが Linux よりも遅いか、Git がファイルシステムを使用する方法が単に気に入らないためかもしれません。
Git メーリング リストのこのスレッドは、あなたが抱えている問題と同じようですが、さらに悪いことです。とりわけ、この引用があります:
単純な現実として、Git は stat が安価であるという前提で書かれており、Windows では実際にはそうではなく、ファイルシステムのキャッシュがこれでうまく機能していないように見えるということだと思います。
SO に関するこの回答では、Windows でのパフォーマンスを劇的に向上させる msysgit のパッチについて言及しています。