简体中文 ▾ 主题 ▾ 最新版本 ▾ git-pack-refs 最后更新于 2.52.0

名称

git-pack-refs - 打包引用(heads and tags)以高效访问仓库

概要

git pack-refs [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]

描述

传统上,分支和标签的尖端(统称为引用)存储在 $GIT_DIR/refs 目录下的子目录中,每个引用一个文件。虽然许多分支尖端倾向于频繁更新,但大多数标签和一些分支尖端从不更新。当一个仓库有成百上千的标签时,这种每个引用一个文件的格式既浪费存储空间又损害性能。

此命令用于通过将引用存储在一个文件中 $GIT_DIR/packed-refs 来解决存储和性能问题。当在传统的 $GIT_DIR/refs 目录层次结构中找不到某个引用时,它会在该文件中查找,如果找到则使用。

对分支的后续更新始终会在 $GIT_DIR/refs 目录层次结构下创建新文件。

处理具有过多引用的仓库的推荐做法是使用 --all 打包一次其引用,并偶尔运行 git pack-refs。标签根据定义是固定的,不应更改。分支头将使用初始的 pack-refs --all 进行打包,但只有当前活动的分支头会解包,下一个(不带 --all 的)pack-refs 将把它们保持解包状态。

选项

--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 的引用。

BUG

在引入 packed-refs 机制之前的旧文档可能仍然会说诸如“存在 .git/refs/heads/<branch> 文件”之类的话,而它的意思是“存在分支 <branch>”。

GIT

Git[1] 套件的一部分