git-index-pack(1)
=================

NAME
----
git-index-pack - Build pack index file for an existing packed archive


SYNOPSIS
--------
[verse]
'git index-pack' [-v] [-o <index-file>] [--[no-]rev-index] <pack-file>
'git index-pack' --stdin [--fix-thin] [--keep] [-v] [-o <index-file>]
		  [--[no-]rev-index] [<pack-file>]


DESCRIPTION
-----------
Reads a packed archive (.pack) from the specified file, and
builds a pack index file (.idx) for it. Optionally writes a
reverse-index (.rev) for the specified pack. The packed
archive together with the pack index can then be placed in
the objects/pack/ directory of a Git repository.


OPTIONS
-------
-v::
	Be verbose about what is going on, including progress status.

-o <index-file>::
	Write the generated pack index into the specified
	file.  Without this option the name of pack index
	file is constructed from the name of packed archive
	file by replacing .pack with .idx (and the program
	fails if the name of packed archive does not end
	with .pack).

--[no-]rev-index::
	When this flag is provided, generate a reverse index
	(a `.rev` file) corresponding to the given pack. If
	`--verify` is given, ensure that the existing
	reverse index is correct. Takes precedence over
	`pack.writeReverseIndex`.

--stdin::
	When this flag is provided, the pack is read from stdin
	instead and a copy is then written to <pack-file>. If
	<pack-file> is not specified, the pack is written to
	objects/pack/ directory of the current Git repository with
	a default name determined from the pack content.  If
	<pack-file> is not specified consider using --keep to
	prevent a race condition between this process and
	'git repack'.

--fix-thin::
	Fix a "thin" pack produced by `git pack-objects --thin` (see
	linkgit:git-pack-objects[1] for details) by adding the
	excluded objects the deltified objects are based on to the
	pack. This option only makes sense in conjunction with --stdin.

--keep::
	Before moving the index into its final destination
	create an empty .keep file for the associated pack file.
	This option is usually necessary with --stdin to prevent a
	simultaneous 'git repack' process from deleting
	the newly constructed pack and index before refs can be
	updated to use objects contained in the pack.

--keep=<msg>::
	Like --keep create a .keep file before moving the index into
	its final destination, but rather than creating an empty file
	place '<msg>' followed by an LF into the .keep file.  The '<msg>'
	message can later be searched for within all .keep files to
	locate any which have outlived their usefulness.

--index-version=<version>[,<offset>]::
	This is intended to be used by the test suite only. It allows
	to force the version for the generated pack index, and to force
	64-bit index entries on objects located above the given offset.

--strict::
	Die, if the pack contains broken objects or links.

--check-self-contained-and-connected::
	Die if the pack contains broken links. For internal use only.

--fsck-objects::
	For internal use only.
+
Die if the pack contains broken objects. If the pack contains a tree
pointing to a .gitmodules blob that does not exist, prints the hash of
that blob (for the caller to check) after the hash that goes into the
name of the pack/idx file (see "Notes").

--threads=<n>::
	Specifies the number of threads to spawn when resolving
	deltas. This requires that index-pack be compiled with
	pthreads otherwise this option is ignored with a warning.
	This is meant to reduce packing time on multiprocessor
	machines. The required amount of memory for the delta search
	window is however multiplied by the number of threads.
	Specifying 0 will cause Git to auto-detect the number of CPU's
	and use maximum 3 threads.

--max-input-size=<size>::
	Die, if the pack is larger than <size>.

--object-format=<hash-algorithm>::
	Specify the given object format (hash algorithm) for the pack.  The valid
	values are 'sha1' and (if enabled) 'sha256'.  The default is the algorithm for
	the current repository (set by `extensions.objectFormat`), or 'sha1' if no
	value is set or outside a repository.
+
This option cannot be used with --stdin.
+
include::object-format-disclaimer.txt[]

NOTES
-----

Once the index has been created, the hash that goes into the name of
the pack/idx file is printed to stdout. If --stdin was
also used then this is prefixed by either "pack\t", or "keep\t" if a
new .keep file was successfully created. This is useful to remove a
.keep file used as a lock to prevent the race with 'git repack'
mentioned above.

GIT
---
Part of the linkgit:git[1] suite
