git-pack-objects(1)
===================

NAME
----
git-pack-objects - Create a packed archive of objects


SYNOPSIS
--------
[verse]
'git-pack-objects' [-q] [--no-reuse-delta] [--non-empty]
	[--local] [--incremental] [--window=N] [--depth=N]
	[--revs [--unpacked | --all]*] [--stdout | base-name] < object-list


DESCRIPTION
-----------
Reads list of objects from the standard input, and writes a packed
archive with specified base-name, or to the standard output.

A packed archive is an efficient way to transfer set of objects
between two repositories, and also is an archival format which
is efficient to access.  The packed archive format (.pack) is
designed to be unpackable without having anything else, but for
random access, accompanied with the pack index file (.idx).

'git-unpack-objects' command can read the packed archive and
expand the objects contained in the pack into "one-file
one-object" format; this is typically done by the smart-pull
commands when a pack is created on-the-fly for efficient network
transport by their peers.

Placing both in the pack/ subdirectory of $GIT_OBJECT_DIRECTORY (or
any of the directories on $GIT_ALTERNATE_OBJECT_DIRECTORIES)
enables git to read from such an archive.

In a packed archive, an object is either stored as a compressed
whole, or as a difference from some other object.  The latter is
often called a delta.


OPTIONS
-------
base-name::
	Write into a pair of files (.pack and .idx), using
	<base-name> to determine the name of the created file.
	When this option is used, the two files are written in
	<base-name>-<SHA1>.{pack,idx} files.  <SHA1> is a hash
	of object names (currently in random order so it does
	not have any useful meaning) to make the resulting
	filename reasonably unique, and written to the standard
	output of the command.

--stdout::
	Write the pack contents (what would have been written to
	.pack file) out to the standard output.

--revs::
	Read the revision arguments from the standard input, instead of
	individual object names.  The revision arguments are processed
	the same way as gitlink:git-rev-list[1] with `--objects` flag
	uses its `commit` arguments to build the list of objects it
	outputs.  The objects on the resulting list are packed.

--unpacked::
	This implies `--revs`.  When processing the list of
	revision arguments read from the standard input, limit
	the objects packed to those that are not already packed.

--all::
	This implies `--revs`.  In addition to the list of
	revision arguments read from the standard input, pretend
	as if all refs under `$GIT_DIR/refs` are specifed to be
	included.

--window and --depth::
	These two options affects how the objects contained in
	the pack are stored using delta compression.  The
	objects are first internally sorted by type, size and
	optionally names and compared against the other objects
	within --window to see if using delta compression saves
	space.  --depth limits the maximum delta depth; making
	it too deep affects the performance on the unpacker
	side, because delta data needs to be applied that many
	times to get to the necessary object.

--incremental::
	This flag causes an object already in a pack ignored
	even if it appears in the standard input.

--local::
	This flag is similar to `--incremental`; instead of
	ignoring all packed objects, it only ignores objects
	that are packed and not in the local object store
	(i.e. borrowed from an alternate).

--non-empty::
        Only create a packed archive if it would contain at
        least one object.

-q::
	This flag makes the command not to report its progress
	on the standard error stream.

--no-reuse-delta::
	When creating a packed archive in a repository that
	has existing packs, the command reuses existing deltas.
	This sometimes results in a slightly suboptimal pack.
	This flag tells the command not to reuse existing deltas
	but compute them from scratch.


Author
------
Written by Linus Torvalds <torvalds@osdl.org>

Documentation
-------------
Documentation by Junio C Hamano

See Also
--------
gitlink:git-rev-list[1]
gitlink:git-repack[1]
gitlink:git-prune-packed[1]

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

