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

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

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

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

OPTIONS

-a

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

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

promisorパックファイルは個別に再パックされます。 .promisor ファイルに関連付けられているパックファイルがある場合、これらのパックファイルは別の個別パックに再パックされ、新しい個別パックに対応する、空の .promisor ファイルが書き込まれます。

-A

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

-d

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

--cruft

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

--cruft-expiration=<approxidate>

次回の git gc の呼び出しを待つ代わりに、 <approxidate> よりも古い到達不能オブジェクトをすぐに期限切れにします。 --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 は最大デルタ深度を制限します。深くしすぎると、必要なオブジェクトに到達するためにデルタデータを何度も適用する必要があるため、アンパッカー側(unpacker side)のパフォーマンスに影響します。

--window のデフォルト値は10で、 --depth は50です。最大深度(maximum depth)は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 の説明を参照してください。

-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>

到達不能なオブジェクトのパックをほどく(loose)ときは、 <when> より古いオブジェクトをわざわざほどきません。これは、フォローアップで行う git prune によってすぐに剪定されるオブジェクトの書き込みを最適化するために使用できます。

-k
--keep-unreachable

-ad と一緒に使用すると、既存のパックから到達できないオブジェクトは、削除されるのではなく、パックファイルの最後に追加されます。さらに、到達不能なlooseオブジェクトはパックされます(そしてそれらのlooseオブジェクトは削除されます)。

-i
--delta-islands

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

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

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

git repack が、等比数列を確実にするために1つに再パックする必要があるパックファイルの「切り分け」を決断することによってこれを保証します。 大きいパックファイルの多く(そのパックに含まれるオブジェクトの数による)がそのまま残るように、パックファイルの最小セットを選択します。

他の再パックモードとは異なり、梱包するオブジェクトのセットは、「ロールアップ」(rolled-up)されるパックのセットによって一意に決定されます。言い換えれば、等比数列を復元するために組み合わせる必要があると判断されたパックです。

--unpacked が指定されている場合、ルーズオブジェクトは、到達可能性に関係なく、この「ロールアップ」に暗黙的に含まれます。 これは将来変更される可能性があります。このオプション(大幅に異なる再パックモードを意味する)は、 git repack の他のすべてのオプションの組み合わせで機能することが保証されていません。

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

-m
--write-midx

非冗長(non-redundant)パックを含むマルチパック・インデックス (git-multi-pack-index(1) 参照) を作成します。

CONFIGURATION

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

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

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

SEE ALSO

GIT

Part of the git(1) suite