TGViewer
Unity Architect: архитектура unity проектов Unity Architect: архитектура unity проектов @uniarchitect · 5.23K subscribers
Post #177 3.36K
НЕ ТЕРЯЕМ .META ФАЙЛЫ

Часто, особенно ребята, которые начинают или мало работают с Unity и Git, получают замечания:
"Ты тут .meta файл забыл закоммитить. Из-за этого ссылки на объект в других компонентах потерялись."

И это раздражающая проблема:

1️⃣ Её можно обнаружить только в runtime. Т.е. пока код, который использует объект с потерянным .meta, не будет вызван — в консоли тишина. Никаких ошибок, никаких предупреждений.

2️⃣ "А у меня локально всё работает" — самая раздражающая фраза, которую только можно услышать. Полное снятие с себя ответственности и перекладывание проблемы на другого.

Благо, есть решение.

🔸unity-git-hooks

unity-git-hooks — 3 простых .sh скрипта, которые копируются в .git/hooks и автоматически следят за консистентностью .meta файлов.

Установка — копируешь pre-commit, post-checkout и post-merge из репозитория в .git/hooks своего проекта. Если хуки уже есть — дописываешь содержимое в конец.

По умолчанию скрипты считают, что папка Assets лежит в корне репозитория. Если структура другая — указываешь путь через git config unity3d.assets-dir client/Assets.

🔸pre-commit — валидация перед коммитом

Самый важный. Срабатывает при git commit и блокирует его, если .meta и ассеты рассинхронизированы.

При добавлении файлов:
— Добавляется .meta, но ассета нет в индексе — ошибка "Redundant meta file"
— Добавляется ассет, но нет .meta для него или для родительских директорий — ошибка "Missing meta file" с подсказкой git add

При удалении файлов:
▫️Удаляется .meta, но ассет остаётся — ошибка. Нельзя удалить .meta и оставить ассет
▫️Удаляется ассет, а .meta осиротевшей директории остаётся в индексе — ошибка с подсказкой git rm

Скрипт проходит вверх по всем родительским директориям до Assets и проверяет каждый уровень.
Т.е. гарантирует простое правило: каждый ассет имеет свой .meta, каждый .meta имеет свой ассет. Ни больше, ни меньше.

🔸post-checkout и post-merge — очистка мусора

Оба делают одно и то же — удаляют пустые директории внутри Assets.

Зачем? Git не отслеживает директории — только файлы.

Когда ты переключаешь ветку или делаешь pull, git удаляет файлы из папки, но сама пустая директория остаётся на диске.

Unity видит эту пустую папку, генерирует для неё .meta файл — и вот у тебя уже грязный git status сразу после checkout. Два хука решают это автоматически.

🔻Одно простое решение на проекте — и на всём протяжении разработки экономишь кучу времени лида и разработчиков на решении багов с потерянными ссылками.

Поставь эти скрипты своим художникам и дизайнерам — уверен, работать станет проще. Только не забудь написать короткий How-to, чтобы потом не отвечать на "А почему мне git выдаёт ошибку?" 😵

Ставь 👍 если тебе заходит такого рода контент!
Ты знаешь кому переслать эту статью 💪

#решения@UniArchitect
GitHub GitHub - doitian/unity-git-hooks: Git hooks for Unity3D project Git hooks for Unity3D project. Contribute to doitian/unity-git-hooks development by creating an account on GitHub.
  • 👍 66
  • 🤔 6
  • 🤣 2
More from @uniarchitect
  1. Jul 24, 2026Post #199
  2. Jul 12, 2026AI НЕ ДЕЛАЕТ ВАС ПРОДУКТИВНЕЕ Незыблемый факт: AI уже очень хорош в маленьких задачах. Нап…
  3. Jul 9, 2026Post #196
  4. Jul 7, 2026UNITY BUILD PIPELINE ПО КИРПИЧИКАМ Полгода назад я решил попробовать активность в блоге, г…
  5. Jul 4, 2026ПРОКЛЯТИЕ ПЕРЕИСПОЛЬЗУЕМОСТИ Делюсь болью. Я последние 5 лет на разных уровнях у разработч…
  6. Jun 29, 2026AI КАК РЕДАКТОР, А НЕ АВТОР Это вторая статья из серии про AI. Первая тут. Когда я запуска…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →