合計で約15.000コミットの非常に大きなプロジェクトがあります。 WindowsマシンでWSLを使用してDebian 9.3
を実行しています。私のgitバージョンは2.17.0
です。
git status
などのコマンドを実行すると、完了するまでに少なくとも20秒かかります。変更がない場合でも。
Gitの古いバージョンを複数試し、Ubuntuも試しましたが、同じ結果が得られます。ここや他のサイトのさまざまな投稿からたくさんのコマンドを実行してみましたが、どれも機能しませんでした。
面白いことに、Windowsでcmd.exe
またはGit Bashを開くと、git status
を実行するのに1秒もかかりません。
何が原因でしょうか?これを修正するにはどうすればよいですか?
2019年6月の更新: WSL 2が来ます 、およびそれとの完全なシステムコールの互換性。
これにより、Gitコマンドのパフォーマンスが大幅に向上するはずです。
元の回答2018:
中間層のないホストで実行すると、Gitが最もよく機能します。
たとえば、リポジトリが共有フォルダにある場合、Gitはかなり遅くなります。
WSLの場合、リポジトリはローカルでアクセスされますが、さまざまなLinuxファイルシステム操作とNTカーネル操作の間で filesystem translation を介してアクセスされます。
これは、パフォーマンスの低下を説明するには十分です。特に大規模なGitリポジトリの場合は、$PATH
がLinuxの代わりに呼び出されるWindows実行可能ファイルを含むフォルダーを参照しないようにしてください
考えられる原因:
PS1
計算を行わずに、基本的なシェルプロンプトでコマンドをテストしてくださいUbuntuを使用した私のWSLでは、最初の「git status」コマンドは2番目のコマンドよりもはるかに低速です。おそらく、最初の実行時にキャッシングまたは索引付けが行われています。 2番目の「gitステータス」の速度は私には問題ありません。
GIT_TRACE_PERFORMANCE
env var:
$ GIT_TRACE_PERFORMANCE=1 git status -sb -uno
08:51:54.525808 read-cache.c:1889 performance: 0.000330659 s: read cache .git/index
08:51:54.528532 preload-index.c:112 performance: 0.002669928 s: preload index
08:51:54.528667 read-cache.c:1447 performance: 0.000109768 s: refresh index
08:51:54.528892 diff-lib.c:250 performance: 0.000056516 s: diff-files
08:51:54.534630 diff-lib.c:527 performance: 0.005070461 s: diff-index
## wip/foo
08:51:54.536419 trace.c:420 performance: 0.013503141 s: git command: git status -sb -uno
ラン
time git clone https://github.com/git/git.git
そして
time git clone git git.1
現在のWSLのThinkpad T460では、 MSYS2 およびvirtualboxed Fedora 28(guiなし、PuTTY)。
ローカルクローンのリアルタイムは
Fedora 3s, WSL 67s, MSYS2 65s
Defenderをオフにした後、時間は
WSL 11s, MSYS2 13s
そう
少しテストを繰り返してください。