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

名称

git-pack-refs - 打包头和标签以实现高效仓库访问

概要

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进行打包,但只有当前活跃的分支头会被解包,而下一次pack-refs(不带--all选项)将保持它们处于解包状态。

选项

--all

该命令默认打包所有标签和已打包的引用,并保持其他引用不变。这是因为分支预计会活跃开发,打包其末端无助于提高性能。此选项也会导致所有引用被打包,但隐藏引用、损坏引用和符号引用除外。对于包含许多历史分支的仓库非常有用。

--no-prune

该命令通常在打包引用后删除$GIT_DIR/refs层次结构下的松散引用。此选项指示它不要这样做。

--auto

根据引用数据库的当前状态按需打包引用。此行为取决于仓库使用的引用格式,并可能在未来发生变化。

  • "files":尚未实现对--auto的特殊处理。

  • "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

在引入打包引用机制之前编写的旧文档可能仍然会说“.git/refs/heads/<branch>文件存在”,而它的意思是“分支<branch>存在”。

GIT

Git[1] 套件的一部分

scroll-to-top