简体中文 ▾ 主题 ▾ 最新版本 ▾ git-repack 最后更新于 2.50.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)中的所有对象组合成一个包。它还可以用于将现有包重新组织成一个更高效的包。

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

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

选项

-a

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

请注意,通过非智能协议(dumb protocols)获取的用户将不得不获取整个新包,以获取其中包含的任何对象,无论他们本地已经有多少该包中的其他对象。

承诺包文件(Promisor packfiles)将单独重新打包:如果存在关联“.promisor”文件的包文件,这些包文件将被重新打包成另一个单独的包,并且将写入一个与新单独包对应的空“.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>

覆盖垃圾包的 --max-pack-size。默认情况下继承 --max-pack-size 的值(如果有)。有关更多详细信息,请参阅 --max-pack-size 的文档。

--combine-cruft-below-size=<n>

在生成垃圾包而不进行修剪时,仅重新打包大小严格小于 <n> 的现有垃圾包,其中 <n> 表示字节数,可选地可以带有“k”、“m”或“g”后缀。大小大于或等于 <n> 的垃圾包将保持原样不重新打包。当您希望避免在包含许多和/或大型不可达对象的仓库中重新打包大型垃圾包时,此选项非常有用。

--expire-to=<dir>

将包含已修剪对象(如果有)的垃圾包写入目录 <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。如果指定,可能会创建多个包文件,这也阻止了位图索引的创建。默认是无限制的,除非设置了配置变量 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 的设置。如果创建了多个包文件,此选项将无效,除非写入 MIDX(在这种情况下会创建多包位图)。

--pack-kept-objects

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

--keep-pack=<pack-name>

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

--unpack-unreachable=<when>

在松散不可达对象时,不要松散任何比 <when> 更旧的对象。这可用于优化写出任何会被后续 git prune 立即修剪的对象。

-k
--keep-unreachable

-ad 一起使用时,现有包中的任何不可达对象将被附加到包文件末尾而不是被移除。此外,任何不可达的松散对象都将被打包(并移除其对应的松散对象)。

-i
--delta-islands

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

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

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

git repack 通过确定需要重新打包成一个包以确保几何级数递进的包文件“切片”来确保这一点。它选择最小的包文件集合,以便尽可能多地保留较大的包文件(按该包中包含的对象数量计算)。

与其他重新打包模式不同,要打包的对象集完全由正在“汇总”的包集决定;换句话说,是那些被确定需要合并以恢复几何级数递进的包。

松散对象隐式包含在此“汇总”中,而不考虑其可达性。这在未来可能会有所改变。

在写入多包位图时,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;这通常会生成稍小的包,但生成的包与 1.4.4 版本之前的 Git 不兼容。如果您需要直接或通过非智能 http 协议与这些旧版 Git 共享您的仓库,则需要将配置变量 repack.UseDeltaBaseOffset 设置为“false”并重新打包。旧版 Git 通过原生协议的访问不受此选项的影响,因为在这种情况下会根据需要即时执行转换。

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

GIT

Git[1] 套件的一部分

scroll-to-top