Spec-Zone.ru › Git

git-pack-refs

Название

git-pack-refs — упаковывает вершины веток и теги для эффективного доступа к репозиторию

Краткое описание

git pack-refs [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]

Описание

Традиционно вершины веток и теги (в совокупности известные как 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 <pattern>

Упаковывает ссылки, соответствующие шаблону glob(7). При повторном использовании этого параметра шаблоны включения накапливаются. Если ссылка одновременно включена в --include и --exclude, приоритет имеет --exclude. Использование --include исключает включение всех тегов по умолчанию. Символические и повреждённые ссылки никогда не упаковываются. При использовании вместе с --all этот параметр не выполняет никаких действий. Используйте --no-include, чтобы очистить и сбросить список шаблонов.

--exclude <pattern>

Не упаковывает ссылки, соответствующие указанному шаблону glob(7). При повторном использовании этого параметра шаблоны исключения накапливаются. Используйте --no-exclude, чтобы очистить и сбросить список шаблонов. Если ссылка уже упакована, добавление её с помощью --exclude не распакует её.

При использовании вместе с --all упаковываются только отдельные ссылки, не соответствующие ни одному из указанных шаблонов --exclude.

При использовании вместе с --include будут упакованы ссылки, указанные в --include, за вычетом ссылок, указанных в --exclude.

Ошибки

В документации, написанной до появления механизма packed-refs, всё ещё могут встречаться формулировки вроде «существует файл .git/refs/heads/<ветка>», хотя подразумевается «существует ветка <ветка>».

pack-refs

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-pack-refs

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API