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