Игнорирование метафайлов папки при управлении версиями
Unity создает и удаляет метафайлы для папок внутри папки активов.
Это может создать досадную ситуацию при использовании контроля версий (которую можно пропустить и перейти к вопросам): кто-то создает папку с файлами, которые будут игнорироваться, но забывают игнорировать метафайл папки. Unity создает метафайл, и этот человек добавляет мета к управлению версиями. Другой человек получает наборы изменений, и, поскольку у него нет папки, его Unity удаляет метафайл и удаляет метафайл из контроля версий. Не все в команде понимают это, поэтому этот процесс увековечен в аду.
Удивительно, но это происходит постоянно. Итак, два вопроса:
- Это важно для версии метафайлов папок?
- Есть ли способ автоматически игнорировать метафайлы папок - особенно в git или mercurial?
Ответы
Ответ 1
Документы Unity говорят:
При создании новых активов убедитесь, что и сам актив, и связанный с ним файл .meta добавлены в систему управления версиями.
Для меня это достаточная причина, чтобы поставить их под контроль версий. Я вижу два подхода к решению проблемы:
- Организационные: Установите соглашение об именах для локальных папок, например, начиная с "_". Но мы все знаем, что это не сработает ;-)
- Установите клиентскую ловушку предварительной фиксации на всех компьютерах. Я еще не сделал этого, но это кажется многообещающим.
Я просто поиграл с различными командами git, может быть полезно следующее:
Скрипт git hook должен сначала проверить, изменился ли .gitignore на:
git diff-index --cached --name-only HEAD | grep ".gitignore"
Распечатайте имена каталогов всех вновь добавленных строк в .gitignore, если они находятся в папке Assets:
git diff --cached --word-diff=plain .gitignore | grep -o -e "{+\/.*\/Assets\/.*+}" | cut -d + -f 2
Обновление
Я только что написал такой хук перед фиксацией :-) См. репозиторий GitHub git-pre-commit-hook-unity-assets для кода и мою публикацию в блоге о нем для более подробной информации. ,
Ответ 2
Добавьте это к .gitignore
#Ignore all .meta file
*.meta
#But not source file with postfix. which is everything but a folder
!*.*.meta
Это будет игнорировать файл без постфикса. Но это не должно быть больно.
Ответ 3
включить метафайлы вместе с активами, просто добавьте следующее после своих исключений:
!*.*.meta
Вот пример моего .gitignore:
# Ignore the following files
# --------------------------
# Unity3D specific
#
**/Library/*
**/Temp/*
**/*.csproj
**/*.unityproj
**/*.sln
**/*.userprefs
**/*.pidb
# include meta files
!*.*.meta
Я помещаю это в папку с структурой хранилища git, поэтому моя структура проекта будет выглядеть так:
root folder /
- Unity Project/
- .gitignore
- .git/
- ProjectFolder/
- {all project related data}
надеюсь, что это поможет.