git gc --aggressive
非常に大きなリポジトリ(apx 100 gb)でを実行しています。2泊前から実行されており、数時間の時点で、「オブジェクトの圧縮:99%(76496/76777)」に固執しています。
私がCtrl-Cプロセスの場合、結果はどうなりますか?私のレポは使用できなくなりますか?私の直感はノーと言っていますが、私はいくつかの意見が欲しいです。ありがとう!
gitは、このような中断から常に安全であると想定されています。ただし、心配な場合は、Ctrl+Zを実行してから、を実行git fsck --full
してシステムの整合性を確認してください。
git-gcの高速化に役立つ可能性のあるgit-config変数がいくつかあります。私は1つの特定の大きなリポジトリで以下を使用しますが、ランダムに試す(または慎重に検討する)オプションは他にもたくさんあります。
git config pack.threads 1
git config pack.deltaCacheSize 1
git config core.packedGitWindowSize 16m
git config core.packedGitLimit 128m
git config pack.windowMemory 512m
これらは、メモリが不足していることが問題である場合にのみ役立ちます。
FWIW、git gc
CTRL+Cで中止してリポジトリを破損しました。git fsck
次のエラーが表示されます。
error: HEAD: invalid sha1 pointer [...]
error: refs/heads/master does not point to a valid object!
notice: No default references
そしてかなりの数
dangling commit [...]
これについては調査しませんが、中止を避けるつもりであることを指摘したいと思いgit gc
ます。
注:git 2.0には興味深い進化があります(2014年第2四半期):
「gitgc--aggressive」は、「-depth」オプションと「gc.aggressiveDepth」構成変数を学習して、組み込みのデフォルト値である250よりも異常な深さを使用できるようにしました。
これは、 NguyễnTháiNgọcDuy()によって行われたコミット125f814で説明されています。pclouds
1c192f3(
gc --aggressive
:それを本当に積極的にする-2007-12-06)がデフォルト--depth=250
値を作成したとき、それは背後にある理由、特にの長所と短所を実際には説明しませんでした--depth=250
。以下のLinusからの古いメールで詳細に説明されています。
簡単に言えば--depth=250
、ディスクセーバーであり、パフォーマンスキラーです。
誰もがその攻撃性に同意するわけではありません。
ユーザーに構成させます。
これは、大規模なリポジトリでそのコマンドを実行するときに発生する「フリーズ」の問題を回避するのに役立ちます。