git-pack-refs(1) (original) (raw)
Traditionally, tips of branches and tags (collectively known as_refs_) were stored one file per ref in a (sub)directory under $GIT_DIR/refs
directory. While many branch tips tend to be updated often, most tags and some branch tips are never updated. When a repository has hundreds or thousands of tags, this one-file-per-ref format both wastes storage and hurts performance.
This command is used to solve the storage and performance problem by storing the refs in a single file,$GIT_DIR/packed-refs
. When a ref is missing from the traditional $GIT_DIR/refs
directory hierarchy, it is looked up in this file and used if found.
Subsequent updates to branches always create new files under$GIT_DIR/refs
directory hierarchy.
A recommended practice to deal with a repository with too many refs is to pack its refs with --all
once, and occasionally run git
pack-refs
. Tags are by definition stationary and are not expected to change. Branch heads will be packed with the initial pack-refs
--all
, but only the currently active branch heads will become unpacked, and the next pack-refs
(without --all
) will leave them unpacked.