Git リポジトリに問題があります。ここ数日、サーバーにプッシュするたびに、「最適なパフォーマンスのためにリポジトリを自動的にパックしています」というメッセージが表示され、消えてシェルが返されないようです。
また、新しいブランチにチェックアウトしてから、以前のブランチでリベースを実行し、git gc
未使用の履歴オブジェクトを削除してからプッシュを実行しましたが、それでもこのメッセージが表示されます。リポジトリで何が起こっているのか教えてください。
ベストアンサー1
簡単に言うと、それは書かれている通りの意味であり、それを終わらせればすべてうまくいくでしょう。
リポジトリ内のルーズ (パックされていない) オブジェクトの数を増やす可能性のあるほとんどの操作 (プッシュを含む) では、Git は を呼び出しますgit gc --auto
。十分な数のルーズ オブジェクト (デフォルトでは少なくとも 6700 個) がある場合は、git repack -d -l
それらをパックするために を呼び出します。個別のパックが多すぎる場合は、それらを 1 つに再パックします。
パックは、多数のオブジェクトを含む、デルタ圧縮された単一のファイルです。オブジェクトをパックに格納する方が効率的ですが、オブジェクトをパック (圧縮) するには時間がかかるため、Git は最初にルーズ オブジェクトを作成し、その後、 の自動呼び出しによってそれらを時々バッチでパックしますgit gc --auto
。
Git が再パックを完了すると、しばらくの間、この問題は発生しなくなります。特に大きなバイナリ オブジェクトが多数ある場合は、確かに時間がかかることがありますが、この問題がトリガーされている場合は、リポジトリが使用するディスク領域の量が大幅に削減される可能性があります。この問題を本当に発生させたくない場合は、構成パラメータを変更できますgc.auto
。この値を 6700 よりはるかに大きい値に増やすと、再パックの発生頻度は減りますが、発生するときの時間は長くなります。この値を小さくすると、現在の再パックを実行する必要がありますが、その後はより頻繁に発生し、より迅速に完了します。0 に設定すると、自動再パックが無効になります。
詳細については、man git-gc
(下記--auto
)およびman git-config
(下記)を参照してください。gc.auto