Решили: Git LFS не заводить, а lfs: true из ci.yml снять (он стоял в двух job’ах и был
no-op, потому что LFS не настроен).
Почему — замер, а не вкус. .git весит 645 МБ, и раздутость истории оказалась не там, где её
ждали:
| Тип | В истории | Сейчас | Множитель | Лечится LFS? |
|---|---|---|---|---|
.a | 208 МБ / 22 объекта | 208 МБ | ×1.0 | нет — статичен, лежит однократно |
.wav | 196 МБ / 446 | 44 МБ | ×4.5 | да, но см. ниже — это вендор |
.asset | 149 МБ / 1049 | — | — | нельзя, YAML нужен diff/merge |
.png | 135 МБ / 7315 | 66 МБ | ×2.0 | да |
.dll, .so | 143 МБ | 93 МБ | ~×1.0 | нет |
.unity, .meta, .md | 147 МБ | — | — | нельзя, текст |
То есть половина веса — нативные библиотеки FMOD и Steamworks плюс YAML-ассеты, и LFS к ним неприменим: статичный бинарник и без LFS лежит в истории один раз, а текст в LFS гнать нельзя.
Убийственный аргумент — трафик. actions/checkout с lfs: true качает LFS-объекты на каждый
прогон, и это списывается из квоты. Прогонов CI — 69 в месяц (замер gh run list: 100 запусков за
20 дней), чекаутов с LFS было бы два на прогон, объём текущих бинарников ~110 МБ. Итого ~15 ГБ против
1 ГБ бесплатной квоты — перерасход в пятнадцать раз, причём симптом («сборка не может скачать файлы»)
уводит искать причину в CI, а не в биллинге.
Грабли — две мои гипотезы, обе неверные, и обе стоило проверить:
- «
.wav×4.5 — это перенормализация нашего аудио, лечится.gitignoreна производной папке». Неверно:FMOD Project/SourceAudio/в истории — 2.5 МБ / 7 объектов. Папка производная (скриптbuild_source_audio.pyеёrmtreeи пересобирает из паков Kenney), но в историю почти не попадала. Экономия была бы 2.5 МБ. - «Тогда это
Assets/Feel— 155 МБ wav и ноль ссылок в коде, asmdef, сценах и префабах». Тоже неверно, и поймало правило «ноль ссылок ещё не мёртвое»: аудит Asset Audit - Feel & Shapes показывает, что из Feel живётMMTools/…/MMCloudsNoise.png— он сэмплится четыре раза шейдером подложки карты акта, — аMMParticlesDustиMMVision/MMConeOfLight.shaderзаложены в план «пыль в луче света».
Настоящий источник веса — Assets/Feel/NiceVibrations (36.6 МБ сейчас, ~155 МБ в истории из-за
переимпортов пакета, 617 файлов): haptic-сэмплы вибрации, на которые нет ни одной ссылки. Но это
вендорный пакет Макса, и haptics могут понадобиться на Steam Deck, поэтому решение о его удалении —
не моё; вес при этом снимается только текущий (36 МБ), историю лечит лишь filter-repo.
Вывод, который дал замер: делать не нужно ничего, кроме снятого флага. Вес, который LFS мог бы сэкономить, Макс явно назвал некритичным, а квота трафика — жёсткая.
Владелец правды: .github/workflows/ci.yml (комментарий на месте снятого флага),
How-to - Adding Assets §1.