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

NAME

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

SYNOPSIS

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

DESCRIPTION

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

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

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

OPTIONS

-a

アンパックされたオブジェクトを段階的にパックする代わりに、参照されているすべてを単一のパックにパックします。プライベート開発に使用されるリポジトリをパックする場合に特に役立ちます。-d と一緒に使用してください。これにより、git prune によって残されたが、git fsck --full --dangling でダングリングとして表示されるオブジェクトがクリーンアップされます。

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

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

-A

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

-d

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

--cruft

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

--cruft-expiration=<approxidate>

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

--max-cruft-size=<n>

新しいパックを作成する前に、<n> バイトまでの大きさのパックにクラフトオブジェクトをリパックします。<n> より小さいクラフトパックが十分にある限り、リパックは、結合されたクラフトパックからのオブジェクトと、新しい到達不能なオブジェクトを含む新しいクラフトパックが作成されるようにします。<n> より大きいクラフトパックは変更されません。新しいクラフトパックが <n> バイトより大きい場合、複数のパックに分割され、すべてが最大 <n> バイトのサイズになることが保証されます。--cruft -d でのみ役立ちます。

--expire-to=<dir>

プルーニングされたオブジェクト (もしあれば) を含むクラフトパックをディレクトリ <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=<パック名>

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

--unpack-unreachable=<時>

到達不能なオブジェクトをバラす際、<時>より古いオブジェクトはバラさないでください。これは、後続のgit pruneで即座に削除されるオブジェクトの書き込みを最適化するために使用できます。

-k
--keep-unreachable

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

-i
--delta-islands

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

-g<係数>
--geometric=<係数>

結果のパック構造を、各後続のパックに、次に大きいパックの少なくとも<係数>倍のオブジェクトが含まれるように配置します。

git repackは、幾何学的な進行を確実にするために、1つにリパックする必要があるパックファイルの「カット」を決定することにより、これを保証します。パックに含まれるオブジェクトの数によって、より大きいパックファイルをできるだけそのままにしておくことができるように、最小のパックファイルのセットを選択します。

他のリパックモードとは異なり、パックするオブジェクトのセットは、「ロールアップ」されるパックのセットによって一意に決定されます。つまり、幾何学的な進行を復元するために結合する必要があると判断されたパックです。

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

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

-m
--write-midx

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

構成

さまざまな構成変数がパッキングに影響します。 git-config[1]を参照してください(「pack」および「delta」を検索)。

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

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

GIT

git[1]スイートの一部

scroll-to-top