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