PDF в git, уменьшить размер

2276
reox

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

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

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

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

6

1 ответ на вопрос

10
Stephen Jennings

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

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

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

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


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

Похожие вопросы