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

NAME
----
git-repack - Script used to pack a repository from a collection of
objects into pack files.


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.

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 available into a single pack.
	Especially useful when packing a repository that is used
	for a private development and there no need to worry
	about people fetching via dumb protocols from it.  Use
	with '-d'.

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

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

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

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

-n::
        Do not update the server information with
        `git update-server-info`.

--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 both --window and --depth is 10.


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

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

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

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

