日本語 ▾ トピック ▾ 最新バージョン ▾ git-repack は 2.49.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 でぶら下がりとして表示されるものをクリーンアップします。

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

プロミサーパックファイルは個別に再パックされます。関連する「.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

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

-f

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

-F

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

-q
--quiet

標準エラー出力ストリームに進捗状況を表示せず、-q オプションを git pack-objects に渡します。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」の接尾辞を付けることができます。許容される最小サイズは1MiBに制限されています。指定された場合、複数のパックファイルが作成されることがあり、これはビットマップインデックスの作成も妨げます。デフォルトは無制限ですが、設定変数 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

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

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

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

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

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

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

マルチパックビットマップを書き込む際、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」で検索)。

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

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

GIT

git[1] スイートの一部

scroll-to-top