mirror of
https://github.com/git/git
synced 2024-11-04 16:17:49 +00:00
6dcffc68f4
Calling git-pack-refs(1) will unconditionally cause it to pack all requested refs regardless of the current state of the ref database. For example: - With the "files" backend we will end up rewriting the complete "packed-refs" file even if only a single ref would require compaction. - With the "reftable" backend we will end up always compacting all tables into a single table. This behaviour can be completely unnecessary depending on the backend and is thus wasteful. With the introduction of the `PACK_REFS_AUTO` flag in the preceding commit we can improve this and let the backends decide for themselves whether to pack refs in the first place. Expose this functionality via a new "--auto" flag in git-pack-refs(1), which mirrors the same flag in both git-gc(1) and git-maintenance(1). Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
109 lines
3.6 KiB
Text
109 lines
3.6 KiB
Text
git-pack-refs(1)
|
|
================
|
|
|
|
NAME
|
|
----
|
|
git-pack-refs - Pack heads and tags for efficient repository access
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[verse]
|
|
'git pack-refs' [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
|
|
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.
|
|
|
|
|
|
OPTIONS
|
|
-------
|
|
|
|
--all::
|
|
|
|
The command by default packs all tags and refs that are already
|
|
packed, and leaves other refs
|
|
alone. This is because branches are expected to be actively
|
|
developed and packing their tips does not help performance.
|
|
This option causes all refs to be packed as well, with the exception
|
|
of hidden refs, broken refs, and symbolic refs. Useful for a repository
|
|
with many branches of historical interests.
|
|
|
|
--no-prune::
|
|
|
|
The command usually removes loose refs under `$GIT_DIR/refs`
|
|
hierarchy after packing them. This option tells it not to.
|
|
|
|
--auto::
|
|
|
|
Pack refs as needed depending on the current state of the ref database. The
|
|
behavior depends on the ref format used by the repository and may change in the
|
|
future.
|
|
+
|
|
- "files": No special handling for `--auto` has been implemented.
|
|
+
|
|
- "reftable": Tables are compacted such that they form a geometric
|
|
sequence. For two tables N and N+1, where N+1 is newer, this
|
|
maintains the property that N is at least twice as big as N+1. Only
|
|
tables that violate this property are compacted.
|
|
|
|
--include <pattern>::
|
|
|
|
Pack refs based on a `glob(7)` pattern. Repetitions of this option
|
|
accumulate inclusion patterns. If a ref is both included in `--include` and
|
|
`--exclude`, `--exclude` takes precedence. Using `--include` will preclude all
|
|
tags from being included by default. Symbolic refs and broken refs will never
|
|
be packed. When used with `--all`, it will be a noop. Use `--no-include` to clear
|
|
and reset the list of patterns.
|
|
|
|
--exclude <pattern>::
|
|
|
|
Do not pack refs matching the given `glob(7)` pattern. Repetitions of this option
|
|
accumulate exclusion patterns. Use `--no-exclude` to clear and reset the list of
|
|
patterns. If a ref is already packed, including it with `--exclude` will not
|
|
unpack it.
|
|
|
|
When used with `--all`, pack only loose refs which do not match any of
|
|
the provided `--exclude` patterns.
|
|
|
|
When used with `--include`, refs provided to `--include`, minus refs that are
|
|
provided to `--exclude` will be packed.
|
|
|
|
|
|
BUGS
|
|
----
|
|
|
|
Older documentation written before the packed-refs mechanism was
|
|
introduced may still say things like ".git/refs/heads/<branch> file
|
|
exists" when it means "branch <branch> exists".
|
|
|
|
|
|
GIT
|
|
---
|
|
Part of the linkgit:git[1] suite
|