git-pack-refs
打包头和标签以实现高效的仓库访问。
概要
'git pack-refs' [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]描述
传统上,分支和标签的提示(统称为 'refs')在 $GIT_DIR/refs 目录下的(子)目录中每个引用存储一个文件。虽然许多分支提示往往经常更新,但大多数标签和一些分支提示永远不会更新。当仓库有数百或数千个标签时,这种每个引用一个文件的格式既浪费存储又损害性能。
此命令通过将引用存储在单个文件 $GIT_DIR/packed-refs 中来解决存储和性能问题。当引用在传统的 $GIT_DIR/refs 目录层次结构中缺失时,会在此文件中查找并使用(如果找到)。
对分支的后续更新总是在 $GIT_DIR/refs 目录层次结构下创建新文件。
处理具有大量引用的仓库的推荐做法是使用 --all 打包其引用一次,并偶尔运行 git pack-refs。标签按定义是固定的,不会更改。分支头将通过初始的 pack-refs --all 打包,但只有当前活动的分支头会被解包,下一次 pack-refs(不带 --all)将保持它们未打包。
选项
--all
:默认情况下,命令打包所有已打包的标签和引用,而不管其他引用。这是因为分支预期会被积极开发,打包它们的提示对性能没有帮助。此选项导致所有引用也被打包,但隐藏的引用、损坏的引用和符号引用除外。对具有许多历史分支的仓库很有用。
--no-prune
:命令通常在打包后移除 $GIT_DIR/refs 层次结构下的松散引用。此选项告诉它不要这样做。
--auto
:根据引用数据库的当前状态按需打包引用。行为取决于仓库使用的引用格式,将来可能会更改。
- "files":根据松散引用与
packed-refs文件大小的比率,将松散引用打包到packed-refs文件中。packed-refs文件越大,在重新打包之前需要存在的松散引用就越多。 - "reftable":表被压缩以形成几何序列。对于两个表 N 和 N+1(N+1 更新),这保持了 N 至少是 N+1 两倍大小的属性。只有违反此属性的表才会被压缩。
--include <pattern>
:基于 glob(7) 模式打包引用。此选项的重复会累积包含模式。如果引用同时包含在 --include 和 --exclude 中,--exclude 优先。使用 --include 将默认排除所有标签。符号引用和损坏的引用永远不会被打包。与 --all 一起使用时,它将是无操作。使用 --no-include 可清除并重置模式列表。
--exclude <pattern>
:不打包与给定 glob(7) 模式匹配的引用。此选项的重复会累积排除模式。使用 --no-exclude 可清除并重置模式列表。如果引用已打包,使用 --exclude 包含它不会将其解包。 与 --all 一起使用时,仅打包不匹配任何提供的 --exclude> 模式的松散引用。 与 --include 一起使用时,提供给 --include 的引用减去提供给 --exclude 的引用将被打包。
错误
在引入打包引用机制之前编写的旧文档可能仍会说类似 ".git/refs/heads/<branch> file exists" 的话,其含义是 "branch <branch> exists"。
Git
git(1) 套件的一部分
