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

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


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


DESCRIPTION
-----------
Reads a packed archive (.pack) from the specified file, and
builds a pack index file (.idx) for it.  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).

--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
	gitlink::git-repack[1] .

--fix-thin::
	It is possible for gitlink:git-pack-objects[1] to build
	"thin" pack, which records objects in deltified form based on
	objects not included in the pack to reduce network traffic.
	Those objects are expected to be present on the receiving end
	and they must be included in the pack for that pack to be self
	contained and indexable. Without this option any attempt to
	index a thin pack will fail. 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 gitlink:git-repack[1] process from deleting
	the newly constructed pack and index before refs can be
	updated to use objects contained in the pack.

--keep='why'::
	Like --keep create a .keep file before moving the index into
	its final destination, but rather than creating an empty file
	place 'why' followed by an LF into the .keep file.  The 'why'
	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.


Note
----

Once the index has been created, the list of object names is sorted
and the SHA1 hash of that list 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 gitlink:git-repack[1]
mentioned above.


Author
------
Written by Sergey Vlasov <vsu@altlinux.ru>

Documentation
-------------
Documentation by Sergey Vlasov

GIT
---
Part of the gitlink:git[7] suite

