Ответ 1
"Окно объекта" - при переупаковке git
сравнивается каждый объект (каждая версия каждого файла, каждый объект дерева каталогов, каждое сообщение фиксации, каждый тег...) против некоторого количества других аналогичных объектов, чтобы найти тот, который создает наименьшую дельта - грубо говоря, самый маленький патч, который может создать этот объект из этого базового объекта.
"Delta chain" - Когда для воссоздания объекта A вам сначала нужно проверить объект B и применить к нему дельта, но для создания B вам нужен объект C, который требует D....
До точки, увеличивая как depth
, так и window
, вы можете получить меньшие пакеты. Однако есть компромиссы. Для window
более высокая настройка означает, что git repack
будет сравнивать каждый объект с большим количеством объектов во время его работы, что приведет к (потенциально значительному) увеличению времени работы git repack
. Однако, как только пакет сгенерирован, window
не влияет на дальнейшие операции (вне других repack
s, во всяком случае). depth
, с другой стороны, оказывает меньшее влияние на время выполнения самого git repack
(хотя оно все еще несколько влияет на него), но чем глубже ваши деревья дельты, тем дольше требуется перестроить старый объект из последовательность базовых объектов, необходимых для создания файла. Это означает, что для таких вещей, как checkout
, когда вы ссылаетесь на более старые коммиты, это означает более длительные времена, поэтому оно может существенно повлиять на воспринимаемую эффективность git
, если вы много работаете в своей истории. И поскольку git
не создает дельта только для старых объектов, вы можете иногда найти последний объект, который медленно извлекается, потому что он имеет несколько уровней вниз по дереву - он не так часто встречается, как со старыми объектами, но он происходит.
Я лично использую window=1024
и depth=256
во всех моих репозиториях, за исключением нескольких клонов очень больших проектов (например, ядро Linux).