Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.53.0 → 2.54.0 no changes
-
2.52.0
2025-11-17
- 2.51.1 → 2.51.2 no changes
-
2.51.0
2025-08-18
- 2.50.1 no changes
-
2.50.0
2025-06-16
- 2.45.1 → 2.49.1 no changes
-
2.45.0
2024-04-29
- 2.42.1 → 2.44.4 no changes
-
2.42.0
2023-08-21
- 2.1.4 → 2.41.3 no changes
-
2.0.5
2014-12-17
НАЗВАНИЕ
git-pack-refs - Упаковка указателей на ветки и меток для эффективного доступа к репозиторию
ОПИСАНИЕ
Традиционно верхушки (tips) веток и меток (совместно известные как «ссылки») хранились по одному файлу на ссылку в (под)каталоге внутри каталога $GIT_DIR/refs. В то время как многие верхушки веток обновляются часто, большинство меток и некоторые верхушки веток никогда не обновляются. Когда в репозитории сотни или тысячи меток, этот формат «один файл на ссылку» приводит к потере места и снижению производительности.
Эта команда используется для решения проблемы хранения и производительности путём сохранения ссылок в одном файле, $GIT_DIR/packed-refs. Если ссылка отсутствует в традиционной иерархии каталогов $GIT_DIR/refs, она ищется в этом файле и используется, если найдена.
Последующие обновления веток всегда создают новые файлы в иерархии каталогов $GIT_DIR/refs.
Рекомендуемая практика для работы с репозиторием со слишком большим количеством ссылок — один раз упаковать (pack) его ссылки с помощью --all, а время от времени запускать git pack-refs. Метки по определению стационарны и не должны изменяться. Головы (heads) веток будут упакованы при первоначальном 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, будут упакованы.
ОШИБКИ
В старой документации, написанной до появления механизма packed-refs, всё ещё могут встречаться фразы вроде «файл .git/refs/heads/<ветка> существует», когда подразумевается «ветка <ветка> существует».
GIT
Является частью пакета git[1]