1. ホーム
  2. performance

[解決済み] git ステータスのパフォーマンスを向上させる方法

2023-04-03 08:40:52

質問

NFS上のLinuxマシンに10GBのレポがあります。最初の時間 git status は 36 分かかり、その後の git status は8分かかります。どうやらGitはOSに依存してファイルをキャッシュしているようです。最初の git のようなコマンドは commit , status というように、レポ全体をパック/リパックする必要があるため、巨大なレポでは非常に長い時間がかかってしまいます。このため git status を使用したことがあるかどうかは分かりませんが、この問題に遭遇した人はいますか?

私が試したのは git gc , git clean , git repack のようになりますが、かかる時間はまだ/ほぼ同じです。

サブモジュールや、レポをより小さなものに分割するような他のコンセプトは役に立ちますか?もしそうなら、より大きなレポを分割するのに最も適しているのはどれでしょうか。大規模なレポでの git コマンドにかかる時間を改善する他の方法はありますか?

どのように解決するのですか?

より正確に言うと、gitは効率に依存しているため lstat(2) システムコールの効率に依存しているので、クライアントの "属性キャッシュのタイムアウト" を調整することで、うまくいくかもしれません。

のマニュアルは git-update-index - のマニュアルモードは、基本的に git-status - によって、これを緩和するためにできることを記述しています。 を使うことで --assume-unchanged フラグ を使用すると、通常の動作を抑制し、変更したパスを手動で更新することができます。ファイルを保存するたびにこのフラグを解除するようにエディターをプログラムすることもできます。

あなたが提案したように、代替案はチェックアウトのサイズを小さくすることです (パックファイルのサイズはここでは本当に重要ではありません)。選択肢としては、疎なチェックアウト、サブモジュール、または Google の レポ ツールです。

(メーリングリスト でのGitの使用に関するスレッドがあります。 がありますが、多くの質問には答えていません)。