English ▾ 主题 ▾ 最新版本 ▾ git-repack 上次更新于 2.49.0

名称

git-repack - 打包存储库中解包的对象

概要

git repack [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m]
	[--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>]
	[--write-midx] [--name-hash-version=<n>]

描述

此命令用于将当前未驻留在“pack”中的所有对象合并到一个 pack 中。 它还可以用于将现有的包重新组织成一个更高效的包。

包是对象的集合,每个对象都经过单独压缩,并应用了增量压缩,存储在一个文件中,并带有一个关联的索引文件。

包用于减少镜像系统、备份引擎、磁盘存储等的负载。

选项

-a

不是增量打包解包的对象,而是将所有引用的内容打包到一个包中。 在打包用于私有开发的存储库时尤其有用。 与 -d 一起使用。 这将清理 git prune 留下的对象,但 git fsck --full --dangling 显示为悬空。

请注意,通过哑协议获取数据的用户必须获取整个新包才能获取任何包含的对象,无论他们本地已经有多少该包中的其他对象。

Promisor packfile 被单独重新打包:如果有具有关联的“.promisor”文件的 packfile,这些 packfile 将被重新打包成另一个单独的包,并且将写入与新单独的包对应的空“.promisor”文件。

-A

-a 相同,除非使用 -d。 然后,先前包中的任何不可达对象都将变为松散的、未打包的对象,而不是留在旧包中。 即使在重新打包时,也绝不会将不可达对象有意添加到包中。 此选项可防止由于将不可达对象留在旧包中然后删除而立即删除这些对象。 相反,松散的不可达对象将根据正常的过期规则通过下一次 *git gc* 调用进行清理。 请参阅 git-gc[1]

-d

打包后,如果新创建的包使某些现有包变得冗余,则删除冗余包。 另运行 *git prune-packed* 以删除冗余的松散对象文件。

--cruft

-a 相同,除非使用 -d。 然后,任何不可达对象都被打包到一个单独的 cruft 包中。 可以使用正常的过期规则通过下一次 git gc 调用清理不可达对象(请参阅 git-gc[1])。 与 -k 不兼容。

--cruft-expiration=<approxidate>

立即过期早于 <approxidate> 的不可达对象,而不是等待下一次 git gc 调用。 仅在使用 --cruft -d 时有用。

--max-cruft-size=<n>

在创建新包之前,将 cruft 对象重新打包到最大为 <n> 字节的包中。 只要有足够的 cruft 包小于 <n>,重新打包就会导致创建一个新的 cruft 包,其中包含来自任何组合的 cruft 包的对象,以及任何新的不可达对象。 大于 <n> 的 Cruft 包将不会被修改。 当新的 cruft 包大于 <n> 字节时,它将被拆分为多个包,所有这些包都保证最大为 <n> 字节。 仅在使用 --cruft -d 时有用。

--expire-to=<dir>

将包含已清理对象的 cruft 包(如果有)写入目录 <dir>。 此选项对于将任何已清理对象的副本保存在单独的目录中作为备份很有用。 仅在使用 --cruft -d 时有用。

-l

--local 选项传递给 *git pack-objects*。 请参阅 git-pack-objects[1]

-f

--no-reuse-delta 选项传递给 git-pack-objects,请参阅 git-pack-objects[1]

-F

--no-reuse-object 选项传递给 git-pack-objects,请参阅 git-pack-objects[1]

-q
--quiet

不在标准错误流上显示任何进度,并将 -q 选项传递给 *git pack-objects*。 请参阅 git-pack-objects[1]

-n

不要使用 *git update-server-info* 更新服务器信息。 此选项跳过更新通过 HTTP 或 FTP 发布此存储库(或其直接副本)所需的本地目录文件。 请参阅 git-update-server-info[1]

--window=<n>
--depth=<n>

这两个选项影响包中包含的对象如何使用增量压缩存储。 对象首先按类型、大小和可选名称在内部排序,并与 --window 中的其他对象进行比较,以查看使用增量压缩是否可以节省空间。 --depth 限制了最大增量深度;使其太深会影响解包器的性能,因为需要多次应用增量数据才能获得必要的对象。

--window 的默认值为 10,--depth 的默认值为 50。最大深度为 4095。

--threads=<n>

此选项传递给 git pack-objects

--window-memory=<n>

此选项在 --window 之上提供了一个额外的限制;窗口大小将动态缩小,以免占用超过 *<n>* 字节的内存。 这在具有大小对象混合的存储库中非常有用,可以避免在大窗口的情况下耗尽内存,但仍然能够利用大窗口来处理较小的对象。 大小可以用“k”、“m”或“g”作为后缀。 --window-memory=0 使内存使用不受限制。 默认值取自 pack.windowMemory 配置变量。 请注意,实际内存使用量将是限制乘以 git-pack-objects[1] 使用的线程数。

--max-pack-size=<n>

每个输出包文件的最大大小。 大小可以用“k”、“m”或“g”作为后缀。 允许的最小大小限制为 1 MiB。 如果指定,可能会创建多个 packfile,这也阻止了位图索引的创建。 默认值是不受限制,除非设置了配置变量 pack.packSizeLimit。 请注意,此选项可能会导致存储库更大、更慢;请参阅 pack.packSizeLimit 中的讨论。

--filter=<filter-spec>

从生成的包文件中删除与筛选器规范匹配的对象,并将它们放入单独的包文件中。 请注意,工作目录中使用的对象不会被筛选掉。 因此,为了使拆分完全起作用,最好在裸存储库中执行它,并同时使用 -a-d 选项。 此外,应使用 --no-write-bitmap-index(或将 repack.writebitmaps 配置选项设置为 false),否则写入位图索引将失败,因为它假定一个包含所有对象的单个包文件。 有关有效的 <filter-spec> 形式,请参阅 git-rev-list[1]

--filter-to=<dir>

将包含已筛选掉对象的包写入目录 <dir>。 仅在使用 --filter 时有用。 这可以用于将包放在单独的对象目录中,该目录通过 Git alternates 机制访问。 警告: 如果无法访问包含已筛选掉对象的包文件,则存储库可能会损坏,因为它可能无法访问该包文件中的对象。 请参阅 gitrepository-layout[5]objectsobjects/info/alternates 部分。

-b
--write-bitmap-index

作为重新打包的一部分,写入可达性位图索引。仅当与-a-A-m一起使用时才有意义,因为位图必须能够引用所有可达对象。此选项会覆盖repack.writeBitmaps的设置。如果创建多个packfile,则此选项不起作用,除非写入MIDX(在这种情况下,将创建多包位图)。

--pack-kept-objects

在重新打包时,包含.keep文件中的对象。请注意,在pack-objects完成后,我们仍然不会删除.keep包。这意味着我们可能会复制对象,但这使得该选项在并发推送或拉取时可以安全使用。此选项通常仅在使用-brepack.writeBitmaps写入位图时才有用,因为它确保位图化的packfile具有必要的对象。

--keep-pack=<pack-name>

从重新打包中排除给定的包。这等同于在包上拥有.keep文件。<pack-name>是不带前导目录的包文件名(例如pack-123.pack)。可以多次指定该选项以保留多个包。

--unpack-unreachable=<when>

当松散不可达对象时,不要费心松散早于<when>的任何对象。这可以用于优化掉会被后续git prune立即修剪的任何对象的写入。

-k
--keep-unreachable

-ad一起使用时,现有包中的任何不可达对象将被附加到packfile的末尾,而不是被删除。此外,任何不可达的松散对象都将被打包(并且它们的松散副本将被删除)。

-i
--delta-islands

--delta-islands选项传递给git-pack-objects,请参阅git-pack-objects[1]

-g<factor>
--geometric=<factor>

安排生成的包结构,使每个后续包包含的对象数量至少是下一个最大包的<factor>倍。

git repack通过确定需要将哪些packfile重新打包成一个来确保几何级数。它选择最小的一组packfile,以便尽可能多的大型packfile(按该包中包含的对象计数)可以保持完整。

与其他重新打包模式不同,要打包的对象集由正在“卷起”的包集唯一确定;换句话说,确定需要组合的包才能恢复几何级数。

松散对象被隐式地包含在此“卷起”中,而不考虑它们的可达性。将来可能会对此进行更改。

在写入多包位图时,git repack选择最大的结果包作为MIDX对象选择的首选包(请参阅git-multi-pack-index[1])。

-m
--write-midx

写入包含非冗余包的多包索引(请参阅git-multi-pack-index[1])。

--name-hash-version=<n>

将此参数提供给底层git pack-objects进程。有关完整详细信息,请参阅git-pack-objects[1]

配置

各种配置变量会影响打包,请参阅git-config[1](搜索“pack”和“delta”)。

默认情况下,该命令将--delta-base-offset选项传递给 *git pack-objects*;这通常会产生稍微小一些的包,但生成的包与Git 1.4.4之前的版本不兼容。如果您需要与此类旧的Git版本共享您的存储库,无论是直接共享还是通过dumb http协议共享,那么您需要将配置变量repack.UseDeltaBaseOffset设置为“false”并重新打包。从旧Git版本通过本地协议进行的访问不受此选项的影响,因为在这种情况下,转换是根据需要在运行时执行的。

增量压缩不用于大于core.bigFileThreshold配置变量的对象以及属性delta设置为false的文件。

GIT

属于git[1]套件的一部分

scroll-to-top