Git fork
at reftables-rust 292 lines 12 kB view raw
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] [-m] 13 [--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>] 14 [--write-midx] [--name-hash-version=<n>] [--path-walk] 15 16DESCRIPTION 17----------- 18 19This command is used to combine all objects that do not currently 20reside in a "pack", into a pack. It can also be used to re-organize 21existing packs into a single, more efficient pack. 22 23A pack is a collection of objects, individually compressed, with 24delta compression applied, stored in a single file, with an 25associated index file. 26 27Packs are used to reduce the load on mirror systems, backup 28engines, disk storage, etc. 29 30OPTIONS 31------- 32 33-a:: 34 Instead of incrementally packing the unpacked objects, 35 pack everything referenced into a single pack. 36 Especially useful when packing a repository that is used 37 for private development. Use 38 with `-d`. This will clean up the objects that `git prune` 39 leaves behind, but `git fsck --full --dangling` shows as 40 dangling. 41+ 42Note that users fetching over dumb protocols will have to fetch the 43whole new pack in order to get any contained object, no matter how many 44other objects in that pack they already have locally. 45+ 46Promisor packfiles are repacked separately: if there are packfiles that 47have an associated ".promisor" file, these packfiles will be repacked 48into another separate pack, and an empty ".promisor" file corresponding 49to the new separate pack will be written. 50 51-A:: 52 Same as `-a`, unless `-d` is used. Then any unreachable 53 objects in a previous pack become loose, unpacked objects, 54 instead of being left in the old pack. Unreachable objects 55 are never intentionally added to a pack, even when repacking. 56 This option prevents unreachable objects from being immediately 57 deleted by way of being left in the old pack and then 58 removed. Instead, the loose unreachable objects 59 will be pruned according to normal expiry rules 60 with the next 'git gc' invocation. See linkgit:git-gc[1]. 61 62-d:: 63 After packing, if the newly created packs make some 64 existing packs redundant, remove the redundant packs. 65 Also run 'git prune-packed' to remove redundant 66 loose object files. 67 68--cruft:: 69 Same as `-a`, unless `-d` is used. Then any unreachable objects 70 are packed into a separate cruft pack. Unreachable objects can 71 be pruned using the normal expiry rules with the next `git gc` 72 invocation (see linkgit:git-gc[1]). Incompatible with `-k`. 73 74--cruft-expiration=<approxidate>:: 75 Expire unreachable objects older than `<approxidate>` 76 immediately instead of waiting for the next `git gc` invocation. 77 Only useful with `--cruft -d`. 78 79--max-cruft-size=<n>:: 80 Overrides `--max-pack-size` for cruft packs. Inherits the value of 81 `--max-pack-size` (if any) by default. See the documentation for 82 `--max-pack-size` for more details. 83 84--combine-cruft-below-size=<n>:: 85 When generating cruft packs without pruning, only repack 86 existing cruft packs whose size is strictly less than `<n>`, 87 where `<n>` represents a number of bytes, which can optionally 88 be suffixed with "k", "m", or "g". Cruft packs whose size is 89 greater than or equal to `<n>` are left as-is and not repacked. 90 Useful when you want to avoid repacking large cruft pack(s) in 91 repositories that have many and/or large unreachable objects. 92 93--expire-to=<dir>:: 94 Write a cruft pack containing pruned objects (if any) to the 95 directory `<dir>`. This option is useful for keeping a copy of 96 any pruned objects in a separate directory as a backup. Only 97 useful with `--cruft -d`. 98 99-l:: 100 Pass the `--local` option to 'git pack-objects'. See 101 linkgit:git-pack-objects[1]. 102 103-f:: 104 Pass the `--no-reuse-delta` option to `git-pack-objects`, see 105 linkgit:git-pack-objects[1]. 106 107-F:: 108 Pass the `--no-reuse-object` option to `git-pack-objects`, see 109 linkgit:git-pack-objects[1]. 110 111-q:: 112--quiet:: 113 Show no progress over the standard error stream and pass the `-q` 114 option to 'git pack-objects'. See linkgit:git-pack-objects[1]. 115 116-n:: 117 Do not update the server information with 118 'git update-server-info'. This option skips 119 updating local catalog files needed to publish 120 this repository (or a direct copy of it) 121 over HTTP or FTP. See linkgit:git-update-server-info[1]. 122 123--window=<n>:: 124--depth=<n>:: 125 These two options affect how the objects contained in the pack are 126 stored using delta compression. The objects are first internally 127 sorted by type, size and optionally names and compared against the 128 other objects within `--window` to see if using delta compression saves 129 space. `--depth` limits the maximum delta depth; making it too deep 130 affects the performance on the unpacker side, because delta data needs 131 to be applied that many times to get to the necessary object. 132+ 133The default value for --window is 10 and --depth is 50. The maximum 134depth is 4095. 135 136--threads=<n>:: 137 This option is passed through to `git pack-objects`. 138 139--window-memory=<n>:: 140 This option provides an additional limit on top of `--window`; 141 the window size will dynamically scale down so as to not take 142 up more than '<n>' bytes in memory. This is useful in 143 repositories with a mix of large and small objects to not run 144 out of memory with a large window, but still be able to take 145 advantage of the large window for the smaller objects. The 146 size can be suffixed with "k", "m", or "g". 147 `--window-memory=0` makes memory usage unlimited. The default 148 is taken from the `pack.windowMemory` configuration variable. 149 Note that the actual memory usage will be the limit multiplied 150 by the number of threads used by linkgit:git-pack-objects[1]. 151 152--max-pack-size=<n>:: 153 Maximum size of each output pack file. The size can be suffixed with 154 "k", "m", or "g". The minimum size allowed is limited to 1 MiB. 155 If specified, multiple packfiles may be created, which also 156 prevents the creation of a bitmap index. 157 The default is unlimited, unless the config variable 158 `pack.packSizeLimit` is set. Note that this option may result in 159 a larger and slower repository; see the discussion in 160 `pack.packSizeLimit`. 161 162--filter=<filter-spec>:: 163 Remove objects matching the filter specification from the 164 resulting packfile and put them into a separate packfile. Note 165 that objects used in the working directory are not filtered 166 out. So for the split to fully work, it's best to perform it 167 in a bare repo and to use the `-a` and `-d` options along with 168 this option. Also `--no-write-bitmap-index` (or the 169 `repack.writebitmaps` config option set to `false`) should be 170 used otherwise writing bitmap index will fail, as it supposes 171 a single packfile containing all the objects. See 172 linkgit:git-rev-list[1] for valid `<filter-spec>` forms. 173 174--filter-to=<dir>:: 175 Write the pack containing filtered out objects to the 176 directory `<dir>`. Only useful with `--filter`. This can be 177 used for putting the pack on a separate object directory that 178 is accessed through the Git alternates mechanism. **WARNING:** 179 If the packfile containing the filtered out objects is not 180 accessible, the repo can become corrupt as it might not be 181 possible to access the objects in that packfile. See the 182 `objects` and `objects/info/alternates` sections of 183 linkgit:gitrepository-layout[5]. 184 185-b:: 186--write-bitmap-index:: 187 Write a reachability bitmap index as part of the repack. This 188 only makes sense when used with `-a`, `-A` or `-m`, as the bitmaps 189 must be able to refer to all reachable objects. This option 190 overrides the setting of `repack.writeBitmaps`. This option 191 has no effect if multiple packfiles are created, unless writing a 192 MIDX (in which case a multi-pack bitmap is created). 193 194--pack-kept-objects:: 195 Include objects in `.keep` files when repacking. Note that we 196 still do not delete `.keep` packs after `pack-objects` finishes. 197 This means that we may duplicate objects, but this makes the 198 option safe to use when there are concurrent pushes or fetches. 199 This option is generally only useful if you are writing bitmaps 200 with `-b` or `repack.writeBitmaps`, as it ensures that the 201 bitmapped packfile has the necessary objects. 202 203--keep-pack=<pack-name>:: 204 Exclude the given pack from repacking. This is the equivalent 205 of having `.keep` file on the pack. `<pack-name>` is the 206 pack file name without leading directory (e.g. `pack-123.pack`). 207 The option can be specified multiple times to keep multiple 208 packs. 209 210--unpack-unreachable=<when>:: 211 When loosening unreachable objects, do not bother loosening any 212 objects older than `<when>`. This can be used to optimize out 213 the write of any objects that would be immediately pruned by 214 a follow-up `git prune`. 215 216-k:: 217--keep-unreachable:: 218 When used with `-ad`, any unreachable objects from existing 219 packs will be appended to the end of the packfile instead of 220 being removed. In addition, any unreachable loose objects will 221 be packed (and their loose counterparts removed). 222 223-i:: 224--delta-islands:: 225 Pass the `--delta-islands` option to `git-pack-objects`, see 226 linkgit:git-pack-objects[1]. 227 228-g<factor>:: 229--geometric=<factor>:: 230 Arrange resulting pack structure so that each successive pack 231 contains at least `<factor>` times the number of objects as the 232 next-largest pack. 233+ 234`git repack` ensures this by determining a "cut" of packfiles that need 235to be repacked into one in order to ensure a geometric progression. It 236picks the smallest set of packfiles such that as many of the larger 237packfiles (by count of objects contained in that pack) may be left 238intact. 239+ 240Unlike other repack modes, the set of objects to pack is determined 241uniquely by the set of packs being "rolled-up"; in other words, the 242packs determined to need to be combined in order to restore a geometric 243progression. 244+ 245Loose objects are implicitly included in this "roll-up", without respect to 246their reachability. This is subject to change in the future. 247+ 248When writing a multi-pack bitmap, `git repack` selects the largest resulting 249pack as the preferred pack for object selection by the MIDX (see 250linkgit:git-multi-pack-index[1]). 251 252-m:: 253--write-midx:: 254 Write a multi-pack index (see linkgit:git-multi-pack-index[1]) 255 containing the non-redundant packs. 256 257--name-hash-version=<n>:: 258 Provide this argument to the underlying `git pack-objects` process. 259 See linkgit:git-pack-objects[1] for full details. 260 261--path-walk:: 262 Pass the `--path-walk` option to the underlying `git pack-objects` 263 process. See linkgit:git-pack-objects[1] for full details. 264 265CONFIGURATION 266------------- 267 268Various configuration variables affect packing, see 269linkgit:git-config[1] (search for "pack" and "delta"). 270 271By default, the command passes `--delta-base-offset` option to 272'git pack-objects'; this typically results in slightly smaller packs, 273but the generated packs are incompatible with versions of Git older than 274version 1.4.4. If you need to share your repository with such ancient Git 275versions, either directly or via the dumb http protocol, then you 276need to set the configuration variable `repack.UseDeltaBaseOffset` to 277"false" and repack. Access from old Git versions over the native protocol 278is unaffected by this option as the conversion is performed on the fly 279as needed in that case. 280 281Delta compression is not used on objects larger than the 282`core.bigFileThreshold` configuration variable and on files with the 283attribute `delta` set to false. 284 285SEE ALSO 286-------- 287linkgit:git-pack-objects[1] 288linkgit:git-prune-packed[1] 289 290GIT 291--- 292Part of the linkgit:git[1] suite