日本語 ▾ トピック ▾ 最新バージョン ▾ git-repack は 2.50.0 で最終更新

名前

git-repack - リポジトリ内のアンパックされたオブジェクトをパックする

概要

git repack [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m]
	[--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>]
	[--write-midx] [--name-hash-version=<n>]

説明

このコマンドは、現在「パック」に含まれていないすべてのオブジェクトをパックに結合するために使用されます。また、既存のパックを単一のより効率的なパックに再編成するためにも使用できます。

パックは、個別に圧縮され、デルタ圧縮が適用されたオブジェクトのコレクションで、関連するインデックスファイルとともに単一のファイルに格納されます。

パックは、ミラーシステム、バックアップエンジン、ディスクストレージなどへの負荷を軽減するために使用されます。

オプション

-a

アンパックされたオブジェクトを増分的にパックする代わりに、参照されているすべてのオブジェクトを単一のパックにパックします。これは、プライベート開発に使用されるリポジトリをパックする場合に特に便利です。-d と一緒に使用します。これにより、git prune が残したオブジェクトはクリーンアップされますが、git fsck --full --dangling でぶら下がりとして表示されるオブジェクトはクリーンアップされません。

dumbプロトコルを介してフェッチするユーザーは、そのパック内にすでにローカルに持っているオブジェクトがいくつあっても、含まれるオブジェクトを取得するために新しいパック全体をフェッチする必要があることに注意してください。

プロミサーパックファイルは個別に再パックされます。関連する「.promisor」ファイルを持つパックファイルがある場合、これらのパックファイルは別のパックに再パックされ、新しい個別のパックに対応する空の「.promisor」ファイルが書き込まれます。

-A

-a と同じですが、-d が使用されている場合は異なります。その場合、以前のパック内の到達不能なオブジェクトは、古いパックに残される代わりに、ルーズでアンパックされたオブジェクトになります。到達不能なオブジェクトは、再パックする場合でも意図的にパックに追加されることはありません。このオプションは、到達不能なオブジェクトが古いパックに残されてから削除されることによってすぐに削除されるのを防ぎます。代わりに、ルーズな到達不能なオブジェクトは、次の git gc 呼び出しで通常の有効期限ルールに従って削除されます。git-gc[1] を参照してください。

-d

パック後、新しく作成されたパックにより既存のパックが冗長になった場合、冗長なパックを削除します。また、冗長なルーズオブジェクトファイルを削除するために git prune-packed を実行します。

--cruft

-a と同じですが、-d が使用されている場合は異なります。その場合、到達不能なオブジェクトは別のcruftパックにパックされます。到達不能なオブジェクトは、次の git gc 呼び出しで通常の有効期限ルールを使用して削除できます(git-gc[1] を参照)。-k とは互換性がありません。

--cruft-expiration=<approxidate>

次の git gc 呼び出しを待つのではなく、<approxidate> より古い到達不能なオブジェクトをすぐに期限切れにします。--cruft -d と一緒に使用した場合にのみ役立ちます。

--max-cruft-size=<n>

cruftパックに対して --max-pack-size を上書きします。デフォルトでは --max-pack-size の値(存在する場合)を継承します。--max-pack-size のドキュメントで詳細を参照してください。

--combine-cruft-below-size=<n>

削除せずにcruftパックを生成する場合、サイズが厳密に <n> 未満の既存のcruftパックのみを再パックします。<n> はバイト数を表し、オプションで「k」、「m」、または「g」の接尾辞を付けることができます。サイズが <n> 以上のcruftパックはそのままにされ、再パックされません。多数および/または大きな到達不能オブジェクトを持つリポジトリで大きなcruftパックの再パックを避けたい場合に便利です。

--expire-to=<dir>

削除されたオブジェクト(存在する場合)を含むcruftパックをディレクトリ <dir> に書き込みます。このオプションは、削除されたオブジェクトのコピーをバックアップとして別のディレクトリに保持するのに役立ちます。--cruft -d と一緒に使用した場合にのみ役立ちます。

-l

git pack-objects--local オプションを渡します。git-pack-objects[1] を参照してください。

-f

git-pack-objects--no-reuse-delta オプションを渡します。git-pack-objects[1] を参照してください。

-F

git-pack-objects--no-reuse-object オプションを渡します。git-pack-objects[1] を参照してください。

-q
--quiet

標準エラー出力ストリームに進捗状況を表示せず、git pack-objects-q オプションを渡します。git-pack-objects[1] を参照してください。

-n

git update-server-info でサーバー情報を更新しません。このオプションは、このリポジトリ(またはその直接コピー)をHTTPまたはFTP経由で公開するために必要なローカルカタログファイルの更新をスキップします。git-update-server-info[1] を参照してください。

--window=<n>
--depth=<n>

これらの2つのオプションは、パックに含まれるオブジェクトがデルタ圧縮を使用してどのように格納されるかに影響します。オブジェクトは、まずタイプ、サイズ、オプションで名前によって内部的にソートされ、--window 内の他のオブジェクトと比較され、デルタ圧縮がスペースを節約するかどうかを確認します。--depth は最大デルタ深さを制限します。深すぎるとアンパッカー側のパフォーマンスに影響します。必要なオブジェクトに到達するためにデルタデータをその回数適用する必要があるためです。

--window のデフォルト値は 10 で、--depth は 50 です。最大深度は 4095 です。

--threads=<n>

このオプションは git pack-objects に渡されます。

--window-memory=<n>

このオプションは、--window に加えて追加の制限を提供します。ウィンドウサイズは、メモリ内で <n> バイトを超えないように動的に縮小されます。これは、大きなウィンドウでメモリ不足にならないようにしながら、小さなオブジェクトには大きなウィンドウを活用できる、大きなオブジェクトと小さなオブジェクトが混在するリポジトリで役立ちます。サイズには「k」、「m」、または「g」の接尾辞を付けることができます。--window-memory=0 はメモリ使用量を無制限にします。デフォルトは pack.windowMemory 設定変数から取得されます。実際のメモリ使用量は、git-pack-objects[1] で使用されるスレッド数に制限を掛けたものになることに注意してください。

--max-pack-size=<n>

各出力パックファイルの最大サイズ。サイズには「k」、「m」、または「g」の接尾辞を付けることができます。許可される最小サイズは 1 MiB に制限されます。指定した場合、複数のパックファイルが作成される可能性があり、これによりビットマップインデックスの作成も防止されます。デフォルトは無制限ですが、設定変数 pack.packSizeLimit が設定されている場合は除きます。このオプションは、リポジトリが大きく、遅くなる可能性があることに注意してください。pack.packSizeLimit の議論を参照してください。

--filter=<filter-spec>

結果のパックファイルからフィルタ仕様に一致するオブジェクトを削除し、それらを別のパックファイルに入れます。作業ディレクトリで使用されているオブジェクトはフィルタリングされないことに注意してください。したがって、分割を完全に機能させるには、ベアリポジトリで実行し、-a オプションと -d オプションをこのオプションと一緒に使用するのが最善です。また、--no-write-bitmap-index(または repack.writebitmaps 設定オプションを false に設定)を使用する必要があります。そうしないと、すべてのオブジェクトを含む単一のパックファイルを想定しているため、ビットマップインデックスの書き込みに失敗します。<filter-spec> の有効な形式については git-rev-list[1] を参照してください。

--filter-to=<dir>

フィルタリングされたオブジェクトを含むパックをディレクトリ <dir> に書き込みます。--filter と一緒に使用した場合にのみ役立ちます。これは、パックをGitの代替メカニズムを介してアクセスされる別のオブジェクトディレクトリに配置するために使用できます。警告: フィルタリングされたオブジェクトを含むパックファイルにアクセスできない場合、そのパックファイル内のオブジェクトにアクセスできない可能性があるため、リポジトリが破損する可能性があります。gitrepository-layout[5]objects および objects/info/alternates セクションを参照してください。

-b
--write-bitmap-index

リパックの一部として到達可能性ビットマップインデックスを書き込みます。これは、ビットマップが到達可能なすべてのオブジェクトを参照できる必要があるため、-a-A、または -m と一緒に使用した場合にのみ意味があります。このオプションは repack.writeBitmaps の設定を上書きします。複数のパックファイルが作成された場合、MIDXが書き込まれない限り(この場合はマルチパックビットマップが作成される)、このオプションは効果がありません。

--pack-kept-objects

リパック時に .keep ファイル内のオブジェクトを含めます。pack-objects の終了後も .keep パックは削除されないことに注意してください。これはオブジェクトを重複させる可能性がありますが、このオプションを同時プッシュまたはフェッチがある場合でも安全に使用できるようにします。このオプションは通常、-b または repack.writeBitmaps でビットマップを書き込んでいる場合にのみ役立ちます。ビットマップ化されたパックファイルに必要なオブジェクトが含まれることを保証するためです。

--keep-pack=<pack-name>

指定されたパックをリパックから除外します。これは、パックに .keep ファイルがあることと同等です。<pack-name> は、先頭のディレクトリなしのパックファイル名です(例: pack-123.pack)。このオプションは、複数のパックを保持するために複数回指定できます。

--unpack-unreachable=<when>

到達不能なオブジェクトを緩める際に、<when> より古いオブジェクトを緩める手間をかけません。これは、後続の git prune によってすぐに削除されるであろうオブジェクトの書き込みを最適化するために使用できます。

-k
--keep-unreachable

-ad と一緒に使用した場合、既存のパックからの到達不能なオブジェクトは削除される代わりにパックファイルの末尾に追加されます。さらに、到達不能なルーズオブジェクトはパックされ(そしてそのルーズな対応するオブジェクトは削除されます)。

-i
--delta-islands

git-pack-objects--delta-islands オプションを渡します。git-pack-objects[1] を参照してください。

-g<factor>
--geometric=<factor>

結果のパック構造を配置し、後続の各パックが次に大きいパックの <factor> 倍以上のオブジェクト数を含むようにします。

git repack は、幾何級数を保証するために、再パックする必要があるパックファイルの「カット」を決定することでこれを確実にします。これにより、大きいパックファイル(そのパックに含まれるオブジェクトの数による)の多くをそのまま残せるように、最小限のパックファイルのセットが選択されます。

他のリパックモードとは異なり、パックするオブジェクトのセットは、"ロールアップ"されるパックのセットによって一意に決定されます。言い換えれば、幾何級数を復元するために結合する必要があると判断されたパックによって決定されます。

ルーズオブジェクトは、到達可能性に関係なく、この「ロールアップ」に暗黙的に含まれます。これは将来変更される可能性があります。

マルチパックビットマップを書き込む際、git repack は、MIDXによるオブジェクト選択の優先パックとして、最も大きい結果のパックを選択します(git-multi-pack-index[1] を参照)。

-m
--write-midx

冗長でないパックを含むマルチパックインデックス(git-multi-pack-index[1] を参照)を書き込みます。

--name-hash-version=<n>

この引数を下位の git pack-objects プロセスに提供します。詳細については git-pack-objects[1] を参照してください。

設定

様々な設定変数がパッキングに影響します。git-config[1](「pack」と「delta」で検索)を参照してください。

デフォルトでは、このコマンドは git pack-objects--delta-base-offset オプションを渡します。これは通常、パックをわずかに小さくしますが、生成されたパックはGitのバージョン1.4.4より古いバージョンとは互換性がありません。このような古いGitバージョンと直接またはdumb httpプロトコル経由でリポジトリを共有する必要がある場合は、設定変数 repack.UseDeltaBaseOffset を「false」に設定してリパックする必要があります。ネイティブプロトコルを介した古いGitバージョンからのアクセスは、このオプションの影響を受けません。その場合、変換は必要に応じてその場で実行されるためです。

デルタ圧縮は、core.bigFileThreshold 設定変数よりも大きいオブジェクトや、属性 delta が false に設定されているファイルには使用されません。

GIT

git[1]スイートの一部

scroll-to-top