Как правильно хранить тяжёлые файлы в гит-репах? Например, бинарники или что-то подобное.
Ответ очевидный и правильный — никак! В гитлабах, гитхабах и битбакетах установлены лимиты на размер отдельных файлов. Там что-то вроде 50 метров на файл даётся.
В принципе можно уложиться. Но нахуй надо. Прикинь: у тебя пайплайн вытягивает репу размером с 10 гигабайт. И так каждую сборку. Гит-репа должна быть тощей и дрищёвой.
А всё тяжёлое будь бобр-добр храни в S3 либо на других решениях.
Но если очень хочется прям в гите держать, для этого существует Git LFS. Дословно — Large File Storage (дохуя большое файловое хранилище).
У LFS уже свои лимиты, в отличие от нативного Git-репозитория. И этот LFS включён из коробки в гитлабах, гитхабах и битбакетах. Там уже размер файла может быть 1 гигабайт или что-то вроде того.
В Gitea тоже можно LFS через конфиг включить:
[server]
LFS_START_SERVER = true
LFS_ALLOW_PURE_SSH = true
[lfs]
PATH = /home/gitea/data/lfs
Как этим пользоваться?
Ставим к себе на машину:
apt-get install git-lfs
brew install git-lfs
Переходим в свой Git-репозиторий и инициализируем:
cd /home/user/linuxfactory/infra
git lfs install
В папке /infra/roles/node_exporter/files у меня лежит бинарник node_exporter, который весит 100 мегабайт.
На самом деле я хуй знает, сколько он весит, это для примера.
Помечаем его:
cd /infra/roles/node_exporter/files
git lfs track "node_exporter"
После этого в папке files появится файл .gitattributes. Это правила для этого файла, которые указывают, чтобы node_exporter улетал в LFS.
Внутри этот файл выглядит так:
node_exporter filter=lfs diff=lfs merge=lfs -text
И по итогу бинарник в репе станет ссылкой на настоящий бинарник в LFS.
А ещё можно вайлдкардами трекать:
git lfs track "*.jpg"
Ну а дальше, как обычно:
git add .
git commit -m "add lfs for node_exporter"
git push
Всё! Теперь твой большой файл аккуратно лежит в LFS, а в самом Git-репозитории осталась лишь ссылка, которая на этот файл ссылается.
Мне тут пришлось партнёрских постов на эту неделю понабрать, реинвестируем в развитие @gitgate, так что рекомендую включить баннерную слепоту и сильно не триггериться. Спасибо за понимание!








Комментарии