git-multi-pack-index - Man Page

Write and verify multi-pack-indexes

Synopsis

git multi-pack-index [<options>] write [--preferred-pack=<pack>]
                         [--[no-]bitmap] [--[no-]incremental] [--[no-]stdin-packs]
                         [--refs-snapshot=<path>] [--[no-]write-chain-file]
                         [--base=<checksum>]
git multi-pack-index [<options>] compact [--[no-]incremental]
                         [--[no-]bitmap] [--base=<checksum>] [--[no-]write-chain-file]
                         <from> <to>
git multi-pack-index [<options>] verify
git multi-pack-index [<options>] expire
git multi-pack-index [<options>] repack [--batch-size=<size>]

Description

Write or verify a multi-pack-index (MIDX) file​.

Options

The following command-line options are applicable to all sub-commands:

--object-dir=<dir>

Use given directory for the location of Git objects​. We check <dir>/packs/multi-pack-index for the current MIDX file, and <dir>/packs for the pack-files to index​.

<dir> must be an alternate of the current repository​.

--progress,  --no-progress

Turn progress on/off explicitly​. If neither is specified, progress is shown if standard error is connected to a terminal​. Supported by sub-commands write, verify, expire, and repack​.

The following subcommands are available:

write

Write a new MIDX file​. The following options are available for the write sub-command:

--preferred-pack=<pack>

When specified, break ties in favor of this pack when there are additional copies of its objects in other packs​. Ties for objects not found in the preferred pack are always resolved in favor of the copy in the pack with the highest mtime​. If unspecified, the pack with the lowest mtime is used by default​. The preferred pack must have at least one object​.

--[no-]bitmap

Control whether or not a multi-pack bitmap is written​.

--stdin-packs

Write a multi-pack index containing only the set of line-delimited pack index basenames provided over stdin​.

--refs-snapshot=<path>

With --bitmap, optionally specify a file which contains a "refs snapshot" taken prior to repacking​.

A reference snapshot is composed of line-delimited OIDs corresponding to the reference tips, usually taken by git repack prior to generating a new pack​. A line may optionally start with a + character to indicate that the reference which corresponds to that OID is "preferred" (see git-config(1)'s pack​.preferBitmapTips​.)

The file given at <path> is expected to be readable, and can contain duplicates​. (If a given OID is given more than once, it is marked as preferred if at least one instance of it begins with the special + marker)​.

--incremental

Write an incremental MIDX file containing only objects and packs not present in an existing MIDX layer​. Migrates non-incremental MIDXs to incremental ones when necessary​.

--[no-]write-chain-file

When used with --incremental, write a new MIDX layer but do not update the multi-pack-index-chain file​. The checksum of the new layer is printed to standard output, allowing the caller to assemble and write the chain itself​. Requires --incremental​.

--base=<checksum>

Specify the checksum of an existing MIDX layer to use as the base when writing a new incremental layer​. The special value none indicates that the new layer should have no base (i​.e​., it becomes a root layer)​. Requires --no-write-chain-file​.

compact

Write a new MIDX layer containing only objects and packs present in the range <from> to <to>, where both arguments are checksums of existing layers in the MIDX chain​.

--incremental

Write the result to a MIDX chain instead of writing a stand-alone MIDX​.

--[no-]bitmap

Control whether or not a multi-pack bitmap is written​.

--[no-]write-chain-file

When used with --incremental, write a new compacted MIDX layer but do not update the multi-pack-index-chain file​. The checksum of the new layer is printed to standard output​. Requires --incremental​.

--base=<checksum>

Specify the checksum of an existing MIDX layer to use as the base for the compacted result, instead of using the immediate parent of <from>​. The special value none indicates that the result should have no base​.

Note that the compact command requires writing a version-2 midx that cannot be read by versions of Git prior to v2​.54​.

verify

Verify the contents of the MIDX file​.

expire

Delete the pack-files that are tracked by the MIDX file, but have no objects referenced by the MIDX (with the exception of ​.keep packs and cruft packs)​. Rewrite the MIDX file afterward to remove all references to these pack-files​.

Note
this mode is incompatible with incremental MIDX files​.

repack

Create a new pack-file containing objects in small pack-files referenced by the multi-pack-index​. If the size given by the --batch-size=<size> argument is zero, then create a pack containing all objects referenced by the multi-pack-index​. For a non-zero batch size, Select the pack-files by examining packs from oldest-to-newest, computing the "expected size" by counting the number of objects in the pack referenced by the multi-pack-index, then divide by the total number of objects in the pack and multiply by the pack size​. We select packs with expected size below the batch size until the set of packs have total expected size at least the batch size, or all pack-files are considered​. If only one pack-file is selected, then do nothing​. If a new pack-file is created, rewrite the multi-pack-index to reference the new pack-file​. A later run of git multi-pack-index expire will delete the pack-files that were part of this batch​.

If repack​.packKeptObjects is false, then any pack-files with an associated ​.keep file will not be selected for the batch to repack​.

Note
this mode is incompatible with incremental MIDX files​.

Examples

See Also

See The Multi-Pack-Index Design Document​[1] and gitformat-pack(5) for more information on the multi-pack-index feature and its file format​.

Git

Part of the git(1) suite

Notes

1.

The Multi-Pack-Index Design Document
file:///usr/share/doc/git/technical/multi-pack-index.html

Info

09/28/2026 Git 2.56.0 Git Manual