git-index-pack
Create a pack index file from a pack
SYNOPSIS
git index-pack [-v] [--keep | --keep-non-core] [--keep-true-parents] [--verify] [-o idx-file] [--stdin] [--strict] [--fsck-objects] pack-file
PARAMETERS
-v, --verbose
Show progress during the indexing process.
--keep
Create a .keep file alongside the .idx file, preventing the pack from being garbage collected.
--keep-non-core
Similar to --keep, but the .keep file is only written if the pack originates from a non-core source (primarily for internal Git use).
--keep-true-parents
Ensures parent information is available in the index. This option is used internally by Git.
--verify
Verify the pack file's contents against its hash to ensure integrity.
-o idx-file, --output=idx-file
Specify the output path and filename for the generated .idx file. If not specified, the index is written to <pack-file>.idx.
--stdin
Read the pack file content from standard input instead of a specified file path.
--strict
Abort the operation if the pack header is found to be malformed.
--fsck-objects
Perform a full filesystem check (fsck) on all objects contained within the pack. This is a resource-intensive operation.
pack-file
The path to the existing .pack file that needs an index created for it. This parameter is required unless --stdin is used.
DESCRIPTION
git-index-pack reads an existing .pack file and generates a corresponding .idx file. This command is crucial for optimizing Git's object lookup, as .idx files provide a fast way to locate objects within a packed repository.
It is commonly used when a pack is received from a remote repository (e.g., during git fetch or git receive-pack), where the pack file is streamed, and the index needs to be built on the client side for efficient access. It also serves to create an index for pack files that might have been received without one, for instance, from older Git versions or specific transfer protocols. Essentially, it transforms raw pack data into an efficiently searchable format for Git.
CAVEATS
The --keep-non-core and --keep-true-parents options are primarily for internal Git use and typically not required for general user interaction.
The --fsck-objects option can be very resource-intensive for large pack files, potentially impacting performance and taking significant time.
EXIT STATUS
git-index-pack exits with 0 on success, indicating that the index file was created successfully. It exits with a non-zero value on errors, which allows for scripting and robust error handling in automated workflows.
HISTORY
git-index-pack is a core utility within the Git version control system, integral to how Git efficiently stores and retrieves objects. Its development paralleled Git's evolution, particularly in improving packfile management and network transfer efficiency. Early Git versions might have handled pack indices differently, but git-index-pack became a standardized internal command to ensure fast object lookup in packed repositories, especially after network fetches or local pack creation. It's a foundational component for Git's performance.
SEE ALSO
git-pack-objects(1), git-fetch(1), git-receive-pack(1), git-archive(1), git-upload-pack(1)