libgit2 автоматически упаковывает репозитории

Я не видел команды сборки мусора в LibGit2, поэтому мне было интересно, упаковывает ли она в настоящее время файлы в локальном репозитории автоматически.


person user3092651    schedule 16.12.2013    source источник


Ответы (1)


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

Переупаковка (и вообще операции gc) — это политика на 90%, а это не то, чем должна заниматься библиотека. Независимо от того, какой инструмент хочет это сделать, он должен выбрать подходящее время для создания из них файла пакета, основываясь на конкретных знаниях об использовании.

person Carlos Martín Nieto    schedule 17.12.2013
comment
Поскольку теперь он поддерживает передачу через ssh, действительно ли он не поддерживает создание пакфайлов? - person user2284570; 06.11.2015
comment
libgit2 поддерживает создание пакфайлов, и он поддерживал его до ssh. Но тут проблема в автоматической перепаковке, которая не делается по указанным мною причинам. - person Carlos Martín Nieto; 10.11.2015
comment
Итак, нет ли способа решить это с помощью libgit2? - person user2284570; 10.11.2015
comment
В этом вопросе не упоминается в чем проблема, поэтому я не могу сказать. Вы можете поместить все объекты в сборщик пакетов libgit2 и посмотреть, работает ли это, но если ошибка связана с нехваткой памяти или чем-то подобным, у git есть параметры, которые вы можете установить, чтобы ограничить размер создаваемых пакетов и память, которую он потребляет. - person Carlos Martín Nieto; 11.11.2015
comment
Проблема в том, что я столкнулся с несколькими неприятными ошибками вgit repack, на исправление которых уйдет несколько недель. Мне определенно нужен альтернативный способ создания упаковочного файла вручную из незакрепленных объектов. Согласно вашему ответу, невозможно сделать то, чтоgit-pack-objects (которое вызываетсяgit repack) с libgit2. Вот почему мой вопрос касается gitdb (часть gitpython). - person user2284570; 11.11.2015
comment
В моем ответе не упоминается, может ли libgit2 это сделать, он касается того, делает ли он это автоматически. Вы можете создавать пакетные файлы с помощью libgit2, но, скорее всего, вам не захочется повторно реализовывать git-repack. Если вы нашли ошибки в git, вы должны сообщить о них. - person Carlos Martín Nieto; 11.11.2015
comment
Да, конечно. Но я не хочу ждать Рождества для этого. Для начала, действительно ли нет функции, которая реализуетgit-pack-objectsв libgit2 (я понимаю, что предпочел бы pygit2)? Потому что повторная реализация облегченной версии git-repack займет гораздо меньше времени, чем исправление git. - person user2284570; 11.11.2015
comment
Как я уже сказал, вы можете создавать пак-файлы, но вы не можете удалять незакрепленные объекты, что является важной частью переупаковки. Код создания пакетного файла libgit2 на 90% состоит из кода создания пакетного файла git.git, поэтому, если проблема кроется глубоко внутри, почти наверняка в libgit2 существуют те же проблемы со структурой данных. Вы уже сообщили о проблеме? В противном случае вы не можете жаловаться, что это займет много времени. Вероятно, потребуется больше времени, чтобы заполнить пробелы между функциями libgit2 и тем, что делает git-repack. - person Carlos Martín Nieto; 12.11.2015