Подтвердить что ты не робот

Игнорирование метафайлов папки при управлении версиями

Unity создает и удаляет метафайлы для папок внутри папки активов.

Это может создать досадную ситуацию при использовании контроля версий (которую можно пропустить и перейти к вопросам): кто-то создает папку с файлами, которые будут игнорироваться, но забывают игнорировать метафайл папки. Unity создает метафайл, и этот человек добавляет мета к управлению версиями. Другой человек получает наборы изменений, и, поскольку у него нет папки, его Unity удаляет метафайл и удаляет метафайл из контроля версий. Не все в команде понимают это, поэтому этот процесс увековечен в аду.

Удивительно, но это происходит постоянно. Итак, два вопроса:

  1. Это важно для версии метафайлов папок?
  2. Есть ли способ автоматически игнорировать метафайлы папок - особенно в git или mercurial?
4b9b3361

Ответ 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}

надеюсь, что это поможет.