Одной из особенностей Git (и других распределенных систем) по сравнению с централизованными системами является то, что каждый репозиторий содержит всю историю проекта. Предположим, вы создаете файл размером 100 МБ, изменяете его 100 раз таким образом, что он плохо сжимается. Вы получите репозиторий объемом 10 ГБ. Это означает, что каждый клон будет загружать 10 ГБ данных, занимая 10 ГБ дискового пространства на каждой машине, на которой вы делаете клон. Что еще больше расстраивает: вам все равно придется загружать эти 10 ГБ данных, даже если вы git rm
большие файлы.
Размещение больших файлов в отдельной системе, такой как git-lfs, позволяет вам хранить только указатели на каждую версию файла в репозитории, поэтому каждый клон будет загружать только крошечный фрагмент данных для каждой версии. Касса загрузит только ту версию, которую вы используете, т. е. 100 МБ в приведенном выше примере. В результате вы будете использовать дисковое пространство на сервере, но сэкономите много пропускной способности и дискового пространства на клиенте.
Кроме того, алгоритм, используемый git gc
(внутри git repack
), не всегда хорошо работает с большими файлами. Последние версии Git достигли прогресса в этой области, и он должен работать достаточно хорошо, но использование большого репозитория с большими файлами в нем может в конечном итоге привести к проблемам (например, нехватке оперативной памяти для переупаковки вашего репозитория).
person
Matthieu Moy
schedule
23.02.2016