设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.50.1 无更改
-
2.50.0
2025-06-16
- 2.45.1 → 2.49.1 无更改
-
2.45.0
2024-04-29
- 2.42.1 → 2.44.4 无更改
-
2.42.0
2023-08-21
- 2.1.4 → 2.41.3 无更改
-
2.0.5
2014-12-17
描述
传统上,分支和标签的末端(统称为引用)以每个引用一个文件的形式存储在$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
的引用。