You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
pre-commit: аудит git-lfs — не пропускать файлы, закоммиченные как raw blobs #44
При коммите иконок (.png, .ico, .icns) файлы попали в историю как сырые бинарные блобы, хотя в .gitattributes для них уже был прописан filter=lfs. Причина: git add выполнился до применения правила, а git add --renormalize не запускался — Git считал индекс unchanged и не переобрабатывал файлы.
git check-attr в такой ситуации бесполезен: атрибут говорит lfs, а блоб в индексе — сырой. git lfs ls-files тоже не помогает: он отражает только закоммиченное состояние, а не то, что сейчас в staging.
В результате:
у контрибьюторов без git-lfs иконки приходят как текстовые указатели и не загружаются в рантайме;
jpackage собирает пакет со сломанными иконками;
размер .git растёт дублями бинарных данных.
Предлагаемое решение
Добавить в pre-commit job, который:
проходит по staged-файлам (git diff --cached --diff-filter=ACMR);
для каждого проверяет, что git check-attr filter = lfs;
читает блоб из индекса через git cat-file -p :<path> и убеждается, что первые байты — заголовок LFS-указателя (version https://git-lfs.github.com/spec/v1);
если хоть один файл не проходит — падает с перечислением виновников и подсказкой git add --renormalize ..
Не должен ничего исправлять — только аудит. Быстрый: на горстке файлов отрабатывает за доли секунды.
Activity