Русский ▾ Topics ▾ Latest version ▾ git-pack-refs last updated in 2.52.0

НАЗВАНИЕ

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

ОБЗОР

git pack-refs [--all] [--no-prune] [--auto] [--include <шаблон>] [--exclude <шаблон>]

ОПИСАНИЕ

Традиционно верхушки (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]