Git
English ▾ 主题 ▾ 最新版本 ▾ git-pack-refs 最后更新于 2.45.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

根据引用数据库的当前状态按需打包引用。行为取决于仓库使用的引用格式,并且将来可能会更改。

  • "文件": 尚未为 --auto 实现特殊处理。

  • "引用表": 表格被压缩,使得它们形成一个几何序列。对于两个表格 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> 文件存在”之类的话,而它指的是“分支 <branch> 存在”。

GIT

git[1] 套件的一部分

scroll-to-top