2016-08-09 8 views

答えて

6

git gcgit repack -ad; git pruneの間に違いはありますか?

違いは、デフォルトではgit gcは、どのようなハウスキーピング作業が必要であるかについて非常に慎重であるということです。たとえば、リポジトリ内の緩いオブジェクトの数が特定のしきい値(gc.auto変数で設定可能)を超えていない限り、git repackは実行されません。また、git gcは、git repackgit pruneより多くのタスクを実行する予定です。

「はい」の場合は、git gc(またはその逆)によって実行される追加の手順はありますか?documentationgit gc実行による

  • git-prune
  • git-reflog
  • git-repack
  • git-rerere

詳細スペック

  • pack-refs --all --prune
  • reflog expire --all
  • repack -d -l
  • prune --expire
  • worktree prune --expire
  • rerere gc
  • :ifically、 source code of gc.c (lines 338-343)1を見て、我々はそれが最も次のコマンドで を呼び出すことがわかります

パック(lines 121-126)の数に応じて、それは代わりに(lines 203-212)-Aオプションでrepackを実行することがあります。

* If there are too many loose objects, but not too many 
* packs, we run "repack -d -l". If there are too many packs, 
* we run "repack -A -d -l". Otherwise we tell the caller 
* there is no need. 
if (too_many_packs()) 
    add_repack_all_option(); 
else if (!too_many_loose_objects()) 
    return 0; 

お知らせline 211-212 of the need_for_gc function上のリポジトリに十分な緩いオブジェクトが存在しない場合に、 gcはまったく実行されません。

この

はさらにdocumentationで明らかにされていますあまりにも多くの緩いオブジェクトまたはリポジトリにすぎ 多くのパックがある場合

清掃が必要です。緩いオブジェクトの数が構成変数の値を超えると、 オブジェクトはすべてgit repack -d -lを使用して1つのパックに結合されます。 gc.autoの値を0に設定すると、 ルーズオブジェクトの自動パッキングが無効になります。

パックの数がgc.autoPackLimitの値を超えると、(.keepファイルでマークされたものを除く) 既存のパックが git repack-Aオプションを使用して、単一パックに統合されています。

ご覧のとおり、git gcは、リポジトリの状態に基づいて正しいことを行うように努めています。

宇宙の最適化や安全性に関してどちらが良いですか?一般的に

それが良い形でリポジトリを維持するために必要な作業の最低額を行いますので、それは単にgit gc --autoを実行する方が良いでしょう - 安全かつあまりにも多くのリソースを無駄にすることなく。

ただし、コンフィグレーション変数gc.auto0に設定してこの動作を無効にしない限り、特定のコマンドに続いて自動的にガベージコレクションがトリガされる可能性があります。 documentationから

このオプションで
--auto

、任意のハウスキーピングが必要かどうかをチェックしgit gc。もしそうでなければ、それは何の仕事もせずに終了する。いくつかのgit コマンドは、 が多数の緩いオブジェクトを作成する操作を実行した後にgit gc --autoを実行します。

したがって、ほとんどのリポジトリでは、明示的にgit gcを実行する必要はありません。すでにそれはあなたの世話をしているためです。 2016年8月8日に行われa0a1831をコミットするよう


1。

1

git help gcは、オプションの構成変数gc.rerereresolvedが保たれているどのくらいの競合のマージのレコードを以前の解決を示しているいくつかのヒント...

が含まれています。

オプションの構成変数gc.rerereunresolvedは、解決されていない競合したマージのレコードが保持される期間を示します。

git repack -ad; git pruneの場合にのみ行われます。

関連する問題