git repack

优质
小牛编辑
123浏览
2023-12-01

名称

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

概要

git repack [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [--window=<n>] [--depth=<n>] [--threads=<n>]

描述

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

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

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

选项

-a

而不是逐步打包解包的对象,将所有引用的东西打包到一个包中。打包用于私人开发的存储库时特别有用。使用-d。这将清理git prune留下的物体,但git fsck --full --dangling显示为悬挂。

请注意,通过哑协议获取的用户必须获取整个新包才能获取任何包含的对象,而不管该包中已有多少个其他对象。

-A

-a一样,除非-d被使用。然后,前一包中的任何无法访问的对象变成松散的,未包装的对象,而不是留在旧包中。无法到达的物体从未故意添加到包中,即使在重新包装时也是如此。此选项可防止无法访问的对象被保留在旧包中而被删除。相反,松散的不可访问的对象将在下一次git gc调用时根据正常的过期规则进行修剪。参见git-gc [1]。

-d

打包之后,如果新创建的包使某些现有包冗余,请移除冗余包。还可以运行git prune-packed以删除多余的松散对象文件。

-l

--local选项传递给git pack-objects。参见git-pack-objects。

-f

--no-reuse-delta选项传递给git-pack-objectsgit-pack-objects。

-F

--no-reuse-object选项传递给git-pack-objectsgit-pack-objects。

-q

-q选项传递给git pack-objects。参见git-pack-objects。

-n

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

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

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

--threads=<n>

该选项通过传递给git pack-objects

--window-memory=<n>

此选项提供额外的限制--window; 窗口大小将动态缩小,以便不占用<n>内存中的多个字节。在大型和小型对象混合使用的存储库中,这对于不会用大型窗口内存不足的情况很有用,但仍可以利用大型窗口来查看较小的对象。大小可以加上“k”,“m”或“g”后缀。--window-memory=0使内存使用无限。默认值取自pack.windowMemory配置变量。请注意,实际内存使用量将是限制乘以git-pack-objects使用的线程数量。

--max-pack-size=<n>

每个输出包文件的最大大小。大小可以加上“k”,“m”或“g”后缀。允许的最小尺寸限制为1 MiB。如果指定,则可能会创建多个包文件,这也会阻止创建位图索引。默认值是无限的,除非配置变量pack.packSizeLimit被设置。

-b --write-bitmap-index

编写一个可达性位图索引作为重新包装的一部分。这只适用于-aor 时才有意义-A,因为位图必须能够引用所有可到达的对象。此选项覆盖设置repack.writeBitmaps。如果创建多个包文件,此选项不起作用。

--pack-kept-objects

.keep重新包装时在文件中包含对象。请注意,我们仍然不会.keeppack-objects完成后删除包。这意味着我们可能会复制对象,但是这可以在并发推送或提取时使用此选项。此选项通常仅在使用-bor 编写位图时才有用repack.writeBitmaps,因为它可确保位图packfile具有必需的对象。

--unpack-unreachable=<when>

松开不可触及的对象时,不要打扰任何比以前更老的物体<when>。这可以用来优化任何可以立即被后续修剪的对象的写入git prune

-k --keep-unreachable

当与它一起使用时-ad,现有包中的任何不可达对象都将被添加到包文件的末尾,而不是被删除。另外,任何不可及的松散物体都将被包装(并且它们的松散对象被移除)。

组态

默认情况下,该命令将--delta-base-offset选项传递给git pack-objects; 这通常会导致更小的包,但生成的包与Git版本比1.4.4版本不兼容。如果您需要直接或通过哑HTTP协议来共享您的存储库中的古老Git版本,那么您需要将配置变量设置repack.UseDeltaBaseOffset为“false”并重新打包。通过本地协议从旧Git版本访问不受此选项的影响,因为在此情况下根据需要即时执行转换。

另请参阅

git-pack-objects[1] git-prune-packed[1]