Documentation / git-repack.txton commit diff-delta: set size out-parameter to 0 for NULL delta (e4b3690)
   1git-repack(1)
   2=============
   3
   4NAME
   5----
   6git-repack - Pack unpacked objects in a repository
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>]
  13
  14DESCRIPTION
  15-----------
  16
  17This command is used to combine all objects that do not currently
  18reside in a "pack", into a pack.  It can also be used to re-organize
  19existing packs into a single, more efficient pack.
  20
  21A pack is a collection of objects, individually compressed, with
  22delta compression applied, stored in a single file, with an
  23associated index file.
  24
  25Packs are used to reduce the load on mirror systems, backup
  26engines, disk storage, etc.
  27
  28OPTIONS
  29-------
  30
  31-a::
  32        Instead of incrementally packing the unpacked objects,
  33        pack everything referenced into a single pack.
  34        Especially useful when packing a repository that is used
  35        for private development. Use
  36        with `-d`.  This will clean up the objects that `git prune`
  37        leaves behind, but `git fsck --full --dangling` shows as
  38        dangling.
  39+
  40Note that users fetching over dumb protocols will have to fetch the
  41whole new pack in order to get any contained object, no matter how many
  42other objects in that pack they already have locally.
  43+
  44Promisor packfiles are repacked separately: if there are packfiles that
  45have an associated ".promisor" file, these packfiles will be repacked
  46into another separate pack, and an empty ".promisor" file corresponding
  47to the new separate pack will be written.
  48
  49-A::
  50        Same as `-a`, unless `-d` is used.  Then any unreachable
  51        objects in a previous pack become loose, unpacked objects,
  52        instead of being left in the old pack.  Unreachable objects
  53        are never intentionally added to a pack, even when repacking.
  54        This option prevents unreachable objects from being immediately
  55        deleted by way of being left in the old pack and then
  56        removed.  Instead, the loose unreachable objects
  57        will be pruned according to normal expiry rules
  58        with the next 'git gc' invocation. See linkgit:git-gc[1].
  59
  60-d::
  61        After packing, if the newly created packs make some
  62        existing packs redundant, remove the redundant packs.
  63        Also run  'git prune-packed' to remove redundant
  64        loose object files.
  65
  66-l::
  67        Pass the `--local` option to 'git pack-objects'. See
  68        linkgit:git-pack-objects[1].
  69
  70-f::
  71        Pass the `--no-reuse-delta` option to `git-pack-objects`, see
  72        linkgit:git-pack-objects[1].
  73
  74-F::
  75        Pass the `--no-reuse-object` option to `git-pack-objects`, see
  76        linkgit:git-pack-objects[1].
  77
  78-q::
  79        Pass the `-q` option to 'git pack-objects'. See
  80        linkgit:git-pack-objects[1].
  81
  82-n::
  83        Do not update the server information with
  84        'git update-server-info'.  This option skips
  85        updating local catalog files needed to publish
  86        this repository (or a direct copy of it)
  87        over HTTP or FTP.  See linkgit:git-update-server-info[1].
  88
  89--window=<n>::
  90--depth=<n>::
  91        These two options affect how the objects contained in the pack are
  92        stored using delta compression. The objects are first internally
  93        sorted by type, size and optionally names and compared against the
  94        other objects within `--window` to see if using delta compression saves
  95        space. `--depth` limits the maximum delta depth; making it too deep
  96        affects the performance on the unpacker side, because delta data needs
  97        to be applied that many times to get to the necessary object.
  98+
  99The default value for --window is 10 and --depth is 50. The maximum
 100depth is 4095.
 101
 102--threads=<n>::
 103        This option is passed through to `git pack-objects`.
 104
 105--window-memory=<n>::
 106        This option provides an additional limit on top of `--window`;
 107        the window size will dynamically scale down so as to not take
 108        up more than '<n>' bytes in memory.  This is useful in
 109        repositories with a mix of large and small objects to not run
 110        out of memory with a large window, but still be able to take
 111        advantage of the large window for the smaller objects.  The
 112        size can be suffixed with "k", "m", or "g".
 113        `--window-memory=0` makes memory usage unlimited.  The default
 114        is taken from the `pack.windowMemory` configuration variable.
 115        Note that the actual memory usage will be the limit multiplied
 116        by the number of threads used by linkgit:git-pack-objects[1].
 117
 118--max-pack-size=<n>::
 119        Maximum size of each output pack file. The size can be suffixed with
 120        "k", "m", or "g". The minimum size allowed is limited to 1 MiB.
 121        If specified, multiple packfiles may be created, which also
 122        prevents the creation of a bitmap index.
 123        The default is unlimited, unless the config variable
 124        `pack.packSizeLimit` is set.
 125
 126-b::
 127--write-bitmap-index::
 128        Write a reachability bitmap index as part of the repack. This
 129        only makes sense when used with `-a` or `-A`, as the bitmaps
 130        must be able to refer to all reachable objects. This option
 131        overrides the setting of `repack.writeBitmaps`.  This option
 132        has no effect if multiple packfiles are created.
 133
 134--pack-kept-objects::
 135        Include objects in `.keep` files when repacking.  Note that we
 136        still do not delete `.keep` packs after `pack-objects` finishes.
 137        This means that we may duplicate objects, but this makes the
 138        option safe to use when there are concurrent pushes or fetches.
 139        This option is generally only useful if you are writing bitmaps
 140        with `-b` or `repack.writeBitmaps`, as it ensures that the
 141        bitmapped packfile has the necessary objects.
 142
 143--keep-pack=<pack-name>::
 144        Exclude the given pack from repacking. This is the equivalent
 145        of having `.keep` file on the pack. `<pack-name>` is the
 146        pack file name without leading directory (e.g. `pack-123.pack`).
 147        The option could be specified multiple times to keep multiple
 148        packs.
 149
 150--unpack-unreachable=<when>::
 151        When loosening unreachable objects, do not bother loosening any
 152        objects older than `<when>`. This can be used to optimize out
 153        the write of any objects that would be immediately pruned by
 154        a follow-up `git prune`.
 155
 156-k::
 157--keep-unreachable::
 158        When used with `-ad`, any unreachable objects from existing
 159        packs will be appended to the end of the packfile instead of
 160        being removed. In addition, any unreachable loose objects will
 161        be packed (and their loose counterparts removed).
 162
 163-i::
 164--delta-islands::
 165        Pass the `--delta-islands` option to `git-pack-objects`, see
 166        linkgit:git-pack-objects[1].
 167
 168Configuration
 169-------------
 170
 171By default, the command passes `--delta-base-offset` option to
 172'git pack-objects'; this typically results in slightly smaller packs,
 173but the generated packs are incompatible with versions of Git older than
 174version 1.4.4. If you need to share your repository with such ancient Git
 175versions, either directly or via the dumb http protocol, then you
 176need to set the configuration variable `repack.UseDeltaBaseOffset` to
 177"false" and repack. Access from old Git versions over the native protocol
 178is unaffected by this option as the conversion is performed on the fly
 179as needed in that case.
 180
 181SEE ALSO
 182--------
 183linkgit:git-pack-objects[1]
 184linkgit:git-prune-packed[1]
 185
 186GIT
 187---
 188Part of the linkgit:git[1] suite