6

У меня есть git-репозиторий со многими PDF-файлами. Размер репозитория git увеличивается настолько, что клонировать репозиторий на новый хост при ограниченном подключении к Интернету очень сложно ...

Я использовал git gc && git gc --aggressive который стоит мне много оперативной памяти и ничего полезного не делал. Размер хранилища остается в основном таким же.

Я слышал о git annex но не знаю, правильно ли это, потому что я не хочу тянуть каждый раз, когда мне нужен один из PDF-файлов. Конечно, я могу это сделать и оставить все файлы на своем ноутбуке, но я хочу клонировать все сразу, а не два разных репозитория)

Есть ли хороший способ уменьшить размер и при этом использовать PDF-файлы (помимо уменьшения размера PDF-файлов - в моем хранилище есть файлы размером более 100 МБ)

1 ответ1

10

Ни Git, ни Mercurial не очень хорошо справляются с большими двоичными файлами. Они оба предполагают, что отслеживаемые файлы являются относительно небольшими и легко различимыми, но файлы PDF не являются ни тем, ни другим. Если вы уже запустили git gc , то ваш репозиторий не станет намного меньше, чем он есть.

Если вам не нужно стороннее решение, вы можете уменьшить это с помощью Git, используя субмодули. Если это имеет смысл, вы можете разбить различные файлы в вашем хранилище на подмодули и клонировать их отдельно. Таким образом, вы можете клонировать главный проект, чтобы получить все ссылки на подмодули, а затем клонировать каждый из подмодулей по мере необходимости.

Однако, как вы подозреваете, Git Annex , вероятно, является лучшим решением. Это хранилище артефактов, что-то вроде bfiles для Mercurial. Эти репозитории артефактов предназначены для использования с большими двоичными недифференцируемыми файлами. Они управляют поиском артефактов; Git и Mercurial отвечают только за ведение ссылок. Таким образом, когда вы клонируете с помощью Git, вам нужно только клонировать ссылки, а поиск артефактов - это отдельный шаг, выполняемый по мере необходимости.

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


В качестве примечания, причина того, что git gc не уменьшил размер хранилища, заключалась в том, что сборка мусора в Git удаляет только не связанные объекты из хранилища и уплотняет потерянные объекты в файлы пакета. Поскольку на ваши PDF-файлы есть ссылки, и они плохо сжимаются в пакетных файлах, репозиторий не стал бы намного меньше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .