34

git gc --aggressive非常に大きなリポジトリ(apx 100 gb)でを実行しています。2泊前から実行されており、数時間の時点で、「オブジェクトの圧縮:99%(76496/76777)」に固執しています。

私がCtrl-Cプロセスの場合、結果はどうなりますか?私のレポは使用できなくなりますか?私の直感はノーと言っていますが、私はいくつかの意見が欲しいです。ありがとう!

4

3 に答える 3

39

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

これらは、メモリが不足していることが問題である場合にのみ役立ちます。

于 2011-05-20T02:06:02.360 に答える
9

FWIW、git gcCTRL+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ます。

于 2017-03-23T20:27:22.340 に答える
4

注:git 2.0には興味深い進化があります(2014年第2四半期)

「gitgc--aggressive」は、「-depth」オプションと「gc.aggressiveDepth」構成変数を学習して、組み込みのデフォルト値である250よりも異常な深さを使用できるようにしました。

これは、 NguyễnTháiNgọcDuy(によって行われたコミット125f814で説明されています。pclouds

1c192f3gc --aggressive:それを本当に積極的にする-2007-12-06)がデフォルト--depth=250値を作成したとき、それは背後にある理由、特にの長所と短所を実際には説明しませんでした--depth=250

以下のLinusからの古いメールで詳細に説明されています。
簡単に言えば--depth=250、ディスクセーバーであり、パフォーマンスキラーです。
誰もがその攻撃性に同意するわけではありません。
ユーザーに構成させます。

これは、大規模なリポジトリでそのコマンドを実行するときに発生する「フリーズ」の問題を回避するのに役立ちます。

于 2014-04-07T13:36:31.853 に答える