Русский ▾ Topics ▾ Latest version ▾ git-repack last updated in 2.53.0

НАЗВАНИЕ

git-repack — упаковка несжатых объектов в репозитории

ОБЗОР

git repack [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m]
	[--window=<число>] [--depth=<число>] [--threads=<число>] [--keep-pack=<имя-пакета>]
	[--write-midx] [--name-hash-version=<число>] [--path-walk]

ОПИСАНИЕ

Эта команда используется для объединения всех объектов, которые в настоящее время не находятся в "пакете", в пакет. Она также может использоваться для реорганизации существующих пакетов в один, более эффективный пакет.

Pack-файл представляет из себя коллекцию объектов, каждый из которых сжат индивидуально с применением дельта-сжатия, хранящихся в одном файле и с ассоциированным индексным файлом.

Pack-файлы используются для уменьшения нагрузки на системы зеркалирования, движки резервного копирования, дисковое хранилище и т.д.

ПАРАМЕТРЫ

-a

Вместо инкрементальной упаковки несжатых объектов упаковать все объекты, на которые есть ссылки, в один пакет. Особенно полезно при упаковке репозитория, который используется для частной разработки. Используйте с -d. Это очистит объекты, которые оставляет после себя git prune, но которые git fsck --full --dangling показывает как болтающиеся.

Обратите внимание, что пользователи, получающие данные по примитивным протоколам, должны будут получить весь новый пакет, чтобы получить любой содержащийся в нём объект, независимо от того, сколько других объектов в этом пакете у них уже есть локально.

Pack-файлы-промисоры переупаковываются отдельно: если есть pack-файлы, имеющие связанный файл ".promisor", эти pack-файлы будут переупакованы в другой отдельный пакет, и будет записан пустой файл ".promisor", соответствующий новому отдельному пакету.

-A

То же, что и -a, если не используется -d. Тогда любые недостижимые объекты в предыдущем пакете становятся несжатыми, распакованными объектами, вместо того чтобы оставаться в старом пакете. Недостижимые объекты никогда намеренно не добавляются в пакет, даже при переупаковке. Этот параметр предотвращает немедленное удаление недостижимых объектов путём их оставления в старом пакете и последующего удаления. Вместо этого несжатые недостижимые объекты будут подчищены в соответствии с обычными правилами истечения срока при следующем вызове git gc. См. git-gc[1].

-d

После упаковки, если вновь созданные пакеты делают некоторые существующие пакеты избыточными, удалить избыточные пакеты. Также выполнить git prune-packed для удаления избыточных несжатых объектных файлов.

--cruft

То же, что и -a, если не используется -d. Тогда любые недостижимые объекты упаковываются в отдельный пакет мусора. Недостижимые объекты могут быть подчищены с использованием обычных правил истечения срока при следующем вызове git gc (см. git-gc[1]). Несовместимо с -k.

--cruft-expiration=<приблизительная-дата>

Удалить недостижимые объекты старше <приблизительная-дата> немедленно, вместо ожидания следующего вызова git gc. Полезно только с --cruft -d.

--max-cruft-size=<n>

Переопределяет --max-pack-size для пакетов мусора. По умолчанию наследует значение --max-pack-size (если есть). Более подробную информацию см. в документации на --max-pack-size.

--combine-cruft-below-size=<число>

При создании пакетов мусора без подчистки переупаковывать только существующие пакеты мусора, размер которых строго меньше <число> байт (может быть дополнительно указан суффикс "k", "m" или "g"). Пакеты мусора, размер которых больше или равен <число>, остаются как есть и не переупаковываются. Полезно, когда вы хотите избежать переупаковки больших пакетов мусора в репозиториях с большим количеством и/или большими недостижимыми объектами.

--expire-to=<каталог>

Записать пакет мусора, содержащий подчищенные объекты (если есть), в каталог <каталог>. Этот параметр полезен для хранения копии любых подчищенных объектов в отдельном каталоге в качестве резервной копии. Полезно только с --cruft -d.

-l

Передать параметр --local в git pack-objects. См. git-pack-objects[1].

-f

Передать параметр --no-reuse-delta в git-pack-objects, см. git-pack-objects[1].

-F

Передать параметр --no-reuse-object в git-pack-objects, см. git-pack-objects[1].

-q
--quiet

Не показывать прогресс в потоке стандартной ошибки и передать параметр -q в git pack-objects. См. git-pack-objects[1].

-n

Не обновлять информацию сервера с помощью git update-server-info. Этот параметр пропускает обновление локальных файлов каталога, необходимых для публикации этого репозитория (или его прямой копии) через HTTP или FTP. См. git-update-server-info[1].

--window=<n>
--depth=<n>

Эти два параметра влияют на то, как объекты, содержащиеся в пакете, хранятся с использованием сжатия дельт. Сначала объекты внутренне сортируются по типу, размеру и, возможно, именам и сравниваются с другими объектами в пределах --window, чтобы увидеть, экономит ли использование сжатия дельт место. --depth ограничивает максимальную глубину дельты; слишком большая глубина влияет на производительность на стороне распаковщика, потому что данные дельты должны быть применены столько раз, чтобы получить необходимый объект.

Значение по умолчанию для --window — 10, а для --depth — 50. Максимальная глубина — 4095.

--threads=<n>

Этот параметр передаётся в git pack-objects.

--window-memory=<n>

Этот параметр обеспечивает дополнительное ограничение поверх --window; размер окна будет динамически уменьшаться, чтобы не занимать в памяти более <число> байт. Это полезно в репозиториях со смесью больших и маленьких объектов, чтобы не исчерпать память при большом окне, но при этом иметь возможность использовать большое окно для маленьких объектов. К размеру можно добавить суффикс "k", "m" или "g". --window-memory=0 делает использование памяти неограниченным. Значение по умолчанию берётся из переменной конфигурации pack.windowMemory. Обратите внимание, что фактическое использование памяти будет равно пределу, умноженному на количество потоков, используемых git-pack-objects[1].

--max-pack-size=<n>

Максимальный размер каждого выходного pack-файла. К размеру можно добавить суффикс "k", "m" или "g". Минимальный допустимый размер ограничен 1 МиБ. Если указано, может быть создано несколько pack-файлов, что также предотвращает создание индекса битовой карты. По умолчанию ограничения нет, если не установлена переменная конфигурации pack.packSizeLimit. Обратите внимание, что этот параметр может привести к увеличению и замедлению репозитория; см. обсуждение в pack.packSizeLimit.

--filter=<filter-spec>

Удалить объекты, соответствующие спецификации фильтра, из результирующего pack-файла и поместить их в отдельный pack-файл. Обратите внимание, что объекты, используемые в рабочем каталоге, не отфильтровываются. Поэтому для полноценной работы разделения лучше всего выполнять его в голом репозитории и использовать параметры -a и -d вместе с этим параметром. Также следует использовать --no-write-bitmap-index (или параметр конфигурации repack.writebitmaps установленный в false), иначе запись индекса битовой карты завершится ошибкой, так как он предполагает один pack-файл, содержащий все объекты. Допустимые формы <спецификатор-фильтра> см. в git-rev-list[1].

--filter-to=<каталог>

Записать пакет, содержащий отфильтрованные объекты, в каталог <каталог>. Полезно только с --filter. Это может использоваться для размещения пакета в отдельном каталоге объектов, доступ к которому осуществляется через механизм альтернатив Git. ПРЕДУПРЕЖДЕНИЕ: Если pack-файл, содержащий отфильтрованные объекты, недоступен, репозиторий может быть повреждён, так как может быть невозможно получить доступ к объектам в этом pack-файле. См. разделы objects и objects/info/alternates в gitrepository-layout[5].

-b
--write-bitmap-index

Записать индекс битовой карты достижимости как часть переупаковки. Это имеет смысл только при использовании с -a, -A или -m, поскольку битовые карты должны иметь возможность ссылаться на все достижимые объекты. Этот параметр переопределяет настройку repack.writeBitmaps. Этот параметр не действует, если создаётся несколько pack-файлов, если только не записывается MIDX (в этом случае создаётся мульти-пакетная битовая карта).

--pack-kept-objects

Включать объекты из файлов .keep при переупаковке. Обратите внимание, что мы по-прежнему не удаляем пакеты .keep после завершения pack-objects. Это означает, что мы можем дублировать объекты, но это делает параметр безопасным для использования при одновременных отправках или получениях. Этот параметр обычно полезен только если вы записываете битовые карты с помощью -b или repack.writeBitmaps, поскольку он гарантирует, что pack-файл с битовой картой имеет необходимые объекты.

--keep-pack=<pack-name>

Исключить указанный пакет из переупаковки. Это эквивалентно наличию файла .keep для пакета. <имя-пакета> — это имя pack-файла без ведущего каталога (например, pack-123.pack). Параметр может быть указан несколько раз, чтобы сохранить несколько пакетов.

--unpack-unreachable=<when>

При распаковке недостижимых объектов не беспокоиться о распаковке любых объектов старше <когда>. Это можно использовать для оптимизации записи любых объектов, которые будут немедленно подчищены последующим git prune.

-k
--keep-unreachable

При использовании с -ad любые недостижимые объекты из существующих пакетов будут добавлены в конец pack-файла вместо удаления. Кроме того, любые недостижимые несжатые объекты будут упакованы (а их несжатые копии удалены).

-i
--delta-islands

Передать параметр --delta-islands в git-pack-objects, см. git-pack-objects[1].

-g<фактор>
--geometric=<фактор>

Упорядочить результирующую структуру пакетов так, чтобы каждый последующий пакет содержал по крайней мере в <фактор> раз больше объектов, чем следующий по величине пакет.

git repack обеспечивает это, определяя "срез" pack-файлов, которые необходимо переупаковать в один, чтобы обеспечить геометрическую прогрессию. Он выбирает наименьший набор pack-файлов, чтобы как можно больше более крупных pack-файлов (по количеству объектов, содержащихся в этом пакете) могли остаться нетронутыми.

В отличие от других режимов переупаковки, набор объектов для упаковки однозначно определяется набором пакетов, которые "сворачиваются"; другими словами, пакетами, которые необходимо объединить для восстановления геометрической прогрессии.

Несжатые объекты неявно включаются в эту "свёртку" независимо от их достижимости. В будущем это может измениться.

При записи мульти-пакетной битовой карты git repack выбирает самый большой результирующий пакет в качестве предпочтительного пакета для выбора объектов MIDX (см. git-multi-pack-index[1]).

-m
--write-midx

Записать индекс нескольких пакетов (см. git-multi-pack-index[1]), содержащий неизбыточные пакеты.

--name-hash-version=<n>

Предоставить этот аргумент нижележащему процессу git pack-objects. Полные подробности см. в git-pack-objects[1].

--path-walk

Передать параметр --path-walk нижележащему процессу git pack-objects. Полные подробности см. в git-pack-objects[1].

КОНФИГУРАЦИЯ

Различные переменные конфигурации влияют на упаковку, см. git-config[1] (поиск по «pack» и «delta»).

По умолчанию команда передаёт параметр --delta-base-offset в git pack-objects; обычно это приводит к немного меньшим пакетам, но созданные пакеты несовместимы с версиями Git старше версии 1.4.4. Если вам нужно предоставить общий доступ к вашему репозитория для таких древних версий Git, либо напрямую, либо через примитивный протокол http, то вам необходимо установить переменную конфигурации repack.UseDeltaBaseOffset в "false" и выполнить переупаковку. Доступ из старых версий Git по собственному протоколу не зависит от этого параметра, поскольку в этом случае преобразование выполняется на лету по мере необходимости.

Сжатие дельт не используется для объектов, размер которых превышает значение переменной конфигурации core.bigFileThreshold, и для файлов с атрибутом delta, установленным в false.

GIT

Является частью пакета git[1]