设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.53.0 无变更
-
2.52.0
2025-11-17
- 2.51.1 → 2.51.2 无更改
-
2.51.0
2025-08-18
- 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
描述
传统上,分支顶端和标签(统称为 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 <模式>
-
根据
glob(7) 模式打包引用。重复此选项可累加包含模式。如果一个引用同时出现在--include和--exclude中,则--exclude优先。使用--include将默认阻止包含所有标签。符号引用和损坏的引用永远不会被打包。与--all一起使用时,此选项将不起作用。使用--no-include可清除并重置模式列表。 - --exclude <模式>
-
不要打包匹配给定
glob(7) 模式的引用。重复此选项可累加排除模式。使用--no-exclude可清除并重置模式列表。如果一个引用已经被打包,使用--exclude包含它不会将其解包。与
--all一起使用时,仅打包不匹配任何提供的--exclude模式的松散引用。与
--include一起使用时,将打包提供给--include的引用减去提供给--exclude的引用。