git-repack(1)
=============

NAME
----
git-repack - Pack unpacked objects in a repository


SYNOPSIS
--------
'git-repack' [-a] [-d] [-f] [-l] [-n] [-q] [--window=N] [--depth=N]

DESCRIPTION
-----------

This script is used to combine all objects that do not currently
reside in a "pack", into a pack.  It can also be used to re-organize
existing packs into a single, more efficient pack.

A pack is a collection of objects, individually compressed, with
delta compression applied, stored in a single file, with an
associated index file.

Packs are used to reduce the load on mirror systems, backup
engines, disk storage, etc.

OPTIONS
-------

-a::
	Instead of incrementally packing the unpacked objects,
	pack everything referenced into a single pack.
	Especially useful when packing a repository that is used
	for private development and there is no need to worry
	about people fetching via dumb protocols from it.  Use
	with '-d'.  This will clean up the objects that `git prune`
	leaves behind, but `git fsck --full` shows as
	dangling.

-d::
	After packing, if the newly created packs make some
	existing packs redundant, remove the redundant packs.
	Also runs linkgit:git-prune-packed[1].

-l::
        Pass the `--local` option to `git pack-objects`, see
	linkgit:git-pack-objects[1].

-f::
        Pass the `--no-reuse-delta` option to `git pack-objects`, see
	linkgit:git-pack-objects[1].

-q::
        Pass the `-q` option to `git pack-objects`, see
	linkgit:git-pack-objects[1].

-n::
	Do not update the server information with
	`git update-server-info`.  This option skips
	updating local catalog files needed to publish
	this repository (or a direct copy of it)
	over HTTP or FTP.  See gitlink:git-update-server-info[1].

--window=[N], --depth=[N]::
	These two options affect 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.
	The default value for --window is 10 and --depth is 50.

--window-memory=[N]::
	This option provides an additional limit on top of `--window`;
	the window size will dynamically scale down so as to not take
	up more than N bytes in memory.  This is useful in
	repositories with a mix of large and small objects to not run
	out of memory with a large window, but still be able to take
	advantage of the large window for the smaller objects.  The
	size can be suffixed with "k", "m", or "g".
	`--window-memory=0` makes memory usage unlimited, which is the
	default.

--max-pack-size=<n>::
	Maximum size of each output packfile, expressed in MiB.
	If specified,  multiple packfiles may be created.
	The default is unlimited.


Configuration
-------------

When configuration variable `repack.UseDeltaBaseOffset` is set
for the repository, the command passes `--delta-base-offset`
option to `git-pack-objects`; this typically results in slightly
smaller packs, but the generated packs are incompatible with
versions of git older than (and including) v1.4.3; do not set
the variable in a repository that older version of git needs to
be able to read (this includes repositories from which packs can
be copied out over http or rsync, and people who obtained packs
that way can try to use older git with it).


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

Documentation
--------------
Documentation by Ryan Anderson <ryan@michonline.com>

See Also
--------
linkgit:git-pack-objects[1]
linkgit:git-prune-packed[1]

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