git repack
名称
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重新包装时在文件中包含对象。请注意,我们仍然不会.keep在pack-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]
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

