2016-08-12 2 views
1

Я использую Git для проекта Unity моего собственного (я единственный разработчик, поэтому могу использовать деструктивные команды).Git Subtree Specific Ignoring

Как известно разработчикам Unity, Unity создает файлы «.meta» для всего, что находится в папке «Активы», которая является основной папкой проекта. И эти файлы «должны» также отслеживаться вместе с оригинальными файлами, чтобы сохранить целостность проекта.

Вот .gitignore файл репозитория проекта:

# Unity Project Folder 
/ExampleProjectName/[Ll]ibrary/ 
/ExampleProjectName/[Tt]emp/ 
/ExampleProjectName/[Oo]bj/ 

# Autogenerated VS/MD solution and project files 
ExportedObj/ 
*.csproj 
*.unityproj 
*.sln 
*.suo 
*.tmp 
*.user 
*.userprefs 
*.pidb 
*.booproj 
*.svd 

# Unity3D Generated File On Crash Reports 
sysinfo.txt 

# OS Related Stuff 
desktop.ini 
.DS_Store 
.DS_Store? 
.Spotlight-V100 
.Trashes 
ehthumbs.db 
Thumbs.db 

У меня также есть рамки и общий репозиторий кода. И I игнорируют файлы .meta в этом репозитории фреймворка, потому что файлы для этих скриптов должны создаваться по каждому проекту, когда структура импортируется в проект. (И это досадно видеть .meta файлы везде в рамочном репо.)

Вот .gitignore файл рамочного хранилища:

# Exclude ".meta" files created by Unity 
*.meta 

# Autogenerated VS/MD solution and project files 
### The rest is identical to the project .gitignore file. ### 

Как вы можете себе представить, я пытался добавить рамки, как поддерево для репозитория проекта. Это действительно работает, но есть проблема: файл .gitignore репозитория каркаса, который игнорирует файлы .meta, также относится к репозиторию проекта и заставляет его игнорировать файлы .meta в каталоге поддерева.

Подводя итог: Я хочу .meta файлов, которые находятся в каталоге поддерева (рекурсивно) будет отслеживаться в хранилище проекта, но будет проигнорирована на рамочном хранилище.

(Для тех, кому интересно, почему .meta файлов должны быть отслежены, наиболее важной причиной является то .meta файлов включают в себя идентификатор соответствующего актива, и Unity использует эти идентификаторы, чтобы Referance этих активов в проекте.)

ответ

2

Вы можете добавить файл .gitignore в свой каталог Asset, который переопределяет и отменяет унаследованное незнание с помощью !

Я немного смущен вашей иерархией файловой структуры, так что вот пример демонстрации.

. 
├── .gitignore 
├── main.meta 
└── unity 
    ├── .gitignore 
    └── sub.meta 

Содержание корня .gitignore

*.meta 

Содержание unity/.gitignore

!*.meta 

Теперь давайте посмотрим, что мерзавец хочет отслеживать:

git add . && git status --ignored 
On branch master 

Initial commit 

Changes to be committed: 
    (use "git rm --cached <file>..." to unstage) 

    new file: .gitignore 
    new file: unity/.gitignore 
    new file: unity/sub.meta 

Ignored files: 
    (use "git add -f <file>..." to include in what will be committed) 

    main.meta 

Вы можете видеть, что оно отслеживает метафайлы Unity, но игнорирует их везде.

Смежные вопросы