Насколько большим должен быть большой файл, чтобы использовать Git LFS?

Я читаю о Git LFS и снова и снова вижу, что он отлично работает с большими файлами.

Git Large File Storage (LFS) заменяет большие файлы, такие как образцы аудио, видео[...]

Версируйте большие файлы — даже размером в пару ГБ — с помощью Git.

Git Large File Storage (LFS) — это бесплатное расширение с открытым исходным кодом, которое заменяет большие файлы текстовыми указателями внутри Git и сохраняет содержимое этих файлов на удаленном сервере.

К сожалению, я нигде не вижу, что такое большой файл на самом деле. Понятно, что то, что занимает несколько гигабайт, — это большой файл, но как насчет того, что поменьше?

Получу ли я пользу от Git LFS с большими файлами размером всего 50 МБ? 20 МБ? 5 МБ? 1 МБ? Меньше 1 МБ?

Насколько большим должен быть большой файл, чтобы воспользоваться преимуществами Git LFS по сравнению с обычным Git?


person Thunderforge    schedule 27.02.2018    source источник
comment
GitHub отклоняет коммит с файлами › 100M. Первым был GitHub, а после него все git-хостинги начали делать то же самое с аналогичными ограничениями. BitBucket, AFAIR ограничивает файлы > 50M.   -  person phd    schedule 28.02.2018


Ответы (2)


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

Самое фундаментальное различие между Git и другими инструментами управления исходным кодом (perforce, svn) заключается в том, что Git сохраняет полный снимок репозитория при каждой фиксации. Таким образом, когда у вас есть большой файл, моментальный снимок содержит сжатую версию этого файла (или указатель на большой двоичный объект файла, если файл не был изменен). Моментальный снимок репозитория хранится в виде графика в папке .git. Таким образом, если файл «большой», размер репозитория будет быстро расти.

Существует несколько критериев для определения того, следует ли хранить файл с помощью Git LFS.

  • Размер файла. IMO, если размер файла превышает 10 МБ, вам следует рассмотреть возможность его сохранения в Git LFS.

  • Как часто файл изменяется. Большой файл (на основе интуиции пользователя о большом файле), который очень часто изменяется, должен храниться с использованием Git LFS.

  • Тип файла. Нетекстовый файл, который нельзя объединить, подходит для хранилища Git LFS.

Получу ли я пользу от Git LFS с «большими файлами» размером всего 50 МБ? 20 МБ? 5 МБ? 1 МБ? Меньше 1 МБ?

В зависимости от того, как часто файл изменяется, вы можете извлечь выгоду из любого упомянутого размера. Рассмотрим случай, когда вы каждый раз делаете 100 коммитов, редактируя файл. Для файла размером 20 МБ, который можно сжать, скажем, до 15 МБ, размер репозитория увеличится примерно на 1,5 ГБ, если файл не хранится с использованием Git LFS.

person yamenk    schedule 05.03.2018
comment
Учитывая полную противоположность отказа от использования LFS: Почему бы не хранить все файлы в LFS? Потому что файлы в LFS не может быть легко изменен, что фактически нарушает важную часть системы контроля версий. - person Brecht Machiels; 19.01.2021

LFS — это инструмент для обслуживания ресурсов проектов. Предположим, у вас есть проект с *.psd файлами, которые используются во внешнем интерфейсе. Эти файлы обычно большие, и версия файла не соответствует предыдущим версиям (git сохраняет историю изменений для текстовых файлов в коммитах, но для двоичных файлов этот подход не может быть использован. diff из двух .cpp файлов имеет значение, но diff из двух сырое фото нет.). Поэтому, если вы поместите ресурсы в репозиторий, его размер и время клонирования будут неприглядно расти. Кроме того, обслуживание будет трудным.

Как можно преодолеть эту проблему? Прежде всего, одна хорошая идея заключается в том, чтобы разделить базу данных больших файлов от кодов на стороне сервера. Другой заключается в том, что клиентам разрешено извлекать часть из них, которые они хотят использовать в настоящее время на своей локальной машине (т.е. не все предыдущие файлы).

Что делает ЛФС? Он хэширует отслеживаемые файлы и сохраняет тему как указатели на исходные файлы. Храните исходные файлы в отдельной базе данных на стороне сервера. Локальные репозитории имеют все указатели в своей истории, но когда вы извлекаете определенный коммит, он извлекает только его содержимое. Таким образом, размер локального репозитория и время клонирования значительно уменьшатся.

PS: способ получения файлов в lfs отличается от git. Поэтому я думаю, что он использует некоторые приемы для разделения больших файлов, отправки их по разным параллельным соединениям и их слияния... и другие вещи, которые могут улучшить его функциональность... Но важно то, что он может увеличить время клонирования/извлечения для сотен/тысяч маленьких файлов.

Также обратите внимание, что у git есть проблема с файлами размером больше 4GB в Windows.

person Bonje Fir    schedule 28.02.2018
comment
Это не отвечает на мой вопрос о том, какого размера должен быть файл, чтобы использовать преимущества Git LFS. Он говорит о больших и маленьких файлах, но не определяет, что они из себя представляют. - person Thunderforge; 28.02.2018
comment
@Thunderforge Да. Я надеялся ясно объяснить, что для использования LFS нет критерия размера. Это больше связано с его типом (например, .bin, .psd, .tif, кроме обычного текста). Частота обновления большого файла... - person Bonje Fir; 28.02.2018
comment
@Thunderforge Для большого файла нет определения ограничения, потому что оно не имеет значения ограничения! - person Bonje Fir; 28.02.2018
comment
Но важно то, что это может увеличить время клонирования/извлечения для сотен/тысяч маленьких файлов. Так что же такое маленький файл? Будет ли быстрее использовать LFS с файлом размером 1 МБ или обычный Git? - person Thunderforge; 28.02.2018
comment
Поскольку файлы, отслеживаемые с помощью LFS, хранятся вне фактического репозитория git, их необходимо извлекать отдельно, что займет некоторое время. Вы можете (или должны) самостоятельно расшифровать, какие файлы вы добавляете в репозиторий напрямую, а какие отслеживаете с помощью LFS. Файлы размером до пары МБ обычно подходят. Если вы превышаете 100 МБ (что, кстати, является жестким ограничением для файлов, хранящихся в git на Github), вам обязательно следует использовать LFS. Между тем, вы должны принять подходящее решение на основе ваших данных. - person Holger Just; 28.02.2018
comment
@Thunderforge Как я уже сказал выше, это компромисс. Сотни/тысячи файлов размером 1 МБ? Как правило, помещайте свои файлы в git до тех пор, пока размер репозитория не станет иметь значение (на самом деле вы можете получить представление о частоте обновления, прежде чем делать это)! Для этого сценария на самом деле лучше положить их в git. - person Bonje Fir; 28.02.2018
comment
Вот такую ​​информацию я и ищу. Вы говорите, что 1 МБ лучше с обычным Git. Мой вопрос заканчивается тем, получу ли я пользу от Git LFS с большими файлами размером всего 50 МБ? 20 МБ? 5 МБ? 1 МБ? Меньше 1 МБ? Это то, что я хочу знать, и то, что вы отвечаете, не касается. - person Thunderforge; 28.02.2018