7

git gcand (さまざまなオプションを使用して)を使用した後、フォルダーにはgit repackまだ4825個のゆるいコミット.git/objectsがあります。それらすべてを残りのパックファイルまたは別のパックファイルに入れたいと思います。

私は多くのコミットの書き換え (修正 + リベース) を行っているため、到達不能なコミットが多数あるのは完全に正常です。私の .gitconfig には、reflog と到達不能なコミットを長期間保持するためのこれらのパラメーターが含まれています。

[gc]
    reflogExpire = 300 days
    reflogExpireUnreachable = 200 days
    pruneExpire = 90 days

意味があるかどうか疑問に思うかもしれませんが、私はすでに必要であり、数か月前に行われたいくつかのコミットを回復しました. 優先度の高いブランチの新しいセットで何ヶ月も開発し、その後、優先度の低い古いブランチで継続することがよくあります。

この質問の主な理由は、git guiこれを何度も行ったにもかかわらず、データベースを圧縮するように文句を言い続けることです。これらの緩いコミットをパックできない場合、この「不平」は のバグである可能性がありますgit gui

4

2 に答える 2

1

git bundleはパッケージングオブジェクトのみを処理するために使用されることを考慮して( fetch-packを呼び出す)、バンドルしてからリポジトリのクローンを作成しようとしましたか?

git bundle create aBundle --all # hopefully package everything, 
                                # the result being *one* file.
git clone aBundle newRepo       # recreate a full repo
# check if the cloned repo contains only packaged object

これが機能する場合は、新しいクローンリポジトリをメインリポジトリとして使用して続行できます。

于 2011-11-28T11:30:09.100 に答える
1

git-gui からの警告は、メンテナンスを行う必要があるかもしれないという単なるヒントです。ほとんどの人にとって、オブジェクトの数が多いと、速度が低下するだけです。あなたの場合、警告を無効にする必要があります。問題の関数はhint_gcであり、git-gui スクリプト ファイルの末尾付近から呼び出されます。以下のようにコメントアウトするだけです。

if {[is_enabled multicommit]} {
        #after 1000 hint_gc
}

マルチコミット ビジネスは、committool または汎用アプリとして実行しているかどうかを判断するフラグです。

他の場所で git-gui を通常どおり使用したい場合は、代わりにリポジトリ固有のフラグを追加できます。何かのようなもの:

if {[is_enabled multicommit] && ![is_config_true gui.skip_gc_warning]} {
        after 1000 hint_gc
}

git config --bool gui.skip_gc_warning trueリポジトリごとに無効にするために使用できるようにする必要があります。

于 2011-11-28T16:13:20.340 に答える