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.54.0 no changes
-
2.53.0
2026-02-02
- 2.51.1 → 2.52.0 no changes
-
2.51.0
2025-08-18
- 2.50.1 no changes
-
2.50.0
2025-06-16
- 2.49.1 no changes
-
2.49.0
2025-03-14
- 2.43.1 → 2.48.2 no changes
-
2.43.0
2023-11-20
- 2.42.2 → 2.42.4 no changes
-
2.42.1
2023-11-02
- 2.39.1 → 2.42.0 no changes
-
2.39.0
2022-12-12
- 2.37.1 → 2.38.5 no changes
-
2.37.0
2022-06-27
- 2.35.1 → 2.36.6 no changes
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 no changes
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 no changes
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 no changes
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 no changes
-
2.31.0
2021-03-15
- 2.23.1 → 2.30.9 no changes
-
2.23.0
2019-08-16
- 2.20.1 → 2.22.5 no changes
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.15.4 → 2.17.6 no changes
-
2.14.6
2019-12-06
- 2.11.4 → 2.13.7 no changes
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.5.6 → 2.7.6 no changes
-
2.4.12
2017-05-05
- 2.1.4 → 2.3.10 no changes
-
2.0.5
2014-12-17
ОБЗОР
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. Это очистит объекты, которые оставляет после себяgitprune, но которыеgitfsck--full--danglingпоказывает как болтающиеся.Обратите внимание, что пользователи, получающие данные по примитивным протоколам, должны будут получить весь новый пакет, чтобы получить любой содержащийся в нём объект, независимо от того, сколько других объектов в этом пакете у них уже есть локально.
Pack-файлы-промисоры переупаковываются отдельно: если есть pack-файлы, имеющие связанный файл ".promisor", эти pack-файлы будут переупакованы в другой отдельный пакет, и будет записан пустой файл ".promisor", соответствующий новому отдельному пакету.
- -A
-
То же, что и
-a, если не используется-d. Тогда любые недостижимые объекты в предыдущем пакете становятся несжатыми, распакованными объектами, вместо того чтобы оставаться в старом пакете. Недостижимые объекты никогда намеренно не добавляются в пакет, даже при переупаковке. Этот параметр предотвращает немедленное удаление недостижимых объектов путём их оставления в старом пакете и последующего удаления. Вместо этого несжатые недостижимые объекты будут подчищены в соответствии с обычными правилами истечения срока при следующем вызове git gc. См. git-gc[1]. - -d
-
После упаковки, если вновь созданные пакеты делают некоторые существующие пакеты избыточными, удалить избыточные пакеты. Также выполнить git prune-packed для удаления избыточных несжатых объектных файлов.
- --cruft
-
То же, что и
-a, если не используется-d. Тогда любые недостижимые объекты упаковываются в отдельный пакет мусора. Недостижимые объекты могут быть подчищены с использованием обычных правил истечения срока при следующем вызовеgitgc(см. git-gc[1]). Несовместимо с-k. - --cruft-expiration=<приблизительная-дата>
-
Удалить недостижимые объекты старше <приблизительная-дата> немедленно, вместо ожидания следующего вызова
gitgc. Полезно только с--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>
-
Этот параметр передаётся в
gitpack-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>
-
При распаковке недостижимых объектов не беспокоиться о распаковке любых объектов старше <когда>. Это можно использовать для оптимизации записи любых объектов, которые будут немедленно подчищены последующим
gitprune. - -k
- --keep-unreachable
-
При использовании с
-adлюбые недостижимые объекты из существующих пакетов будут добавлены в конец pack-файла вместо удаления. Кроме того, любые недостижимые несжатые объекты будут упакованы (а их несжатые копии удалены). - -i
- --delta-islands
-
Передать параметр
--delta-islandsвgit-pack-objects, см. git-pack-objects[1]. - -g<фактор>
- --geometric=<фактор>
-
Упорядочить результирующую структуру пакетов так, чтобы каждый последующий пакет содержал по крайней мере в <фактор> раз больше объектов, чем следующий по величине пакет.
gitrepackобеспечивает это, определяя "срез" pack-файлов, которые необходимо переупаковать в один, чтобы обеспечить геометрическую прогрессию. Он выбирает наименьший набор pack-файлов, чтобы как можно больше более крупных pack-файлов (по количеству объектов, содержащихся в этом пакете) могли остаться нетронутыми.В отличие от других режимов переупаковки, набор объектов для упаковки однозначно определяется набором пакетов, которые "сворачиваются"; другими словами, пакетами, которые необходимо объединить для восстановления геометрической прогрессии.
Несжатые объекты неявно включаются в эту "свёртку" независимо от их достижимости. В будущем это может измениться.
При записи мульти-пакетной битовой карты
gitrepackвыбирает самый большой результирующий пакет в качестве предпочтительного пакета для выбора объектов MIDX (см. git-multi-pack-index[1]). - -m
- --write-midx
-
Записать индекс нескольких пакетов (см. git-multi-pack-index[1]), содержащий неизбыточные пакеты.
- --name-hash-version=<n>
-
Предоставить этот аргумент нижележащему процессу
gitpack-objects. Полные подробности см. в git-pack-objects[1]. - --path-walk
-
Передать параметр
--path-walkнижележащему процессуgitpack-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]