75

Unity creates and deletes meta files for folders inside the Asset folder.

That can create an annoying situation when using version control (that you can skip and go to the questions): someone creates a folder of files that will be ignored but forget to ignore the folder's meta file. Unity creates the meta file and this person adds the meta to version control. Another person gets the changesets and, since they don't have the folder, their Unity deletes the meta file and they remove the meta file from version control. Not everyone in the team understand this, so the process is perpetuated in a loop from hell.

Surprisingly this happens all the time. So, two questions:

  1. Is it important to version folder meta files?
  2. Is there a way to automatically ignore folder meta files - particularly on git or mercurial?
4

4 回答 4

69

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以及有关它的博客文章以获取更多详细信息。

于 2013-10-03T11:10:56.243 回答
7

将此添加到 .gitignore

#Ignore all .meta file
*.meta
#But not source file with postfix. which is everything but a folder
!*.*.meta

这将忽略没有后缀的文件。但这不应该受到伤害。

于 2019-08-30T14:37:24.447 回答
0

是的,.meta 文件很重要。它们为您提供了一些有用的任务,例如保留文件和文件夹的 GUID,以便 Unity 可以保留引用,即使文件/文件夹被重命名或重新定位。查看完整讨论

您需要添加

# Meta Files built by Visual Studio
*.meta

# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta

# Autogenerated files
InitTestScene*.unity.meta
InitTestScene*.unity

# Asset meta data should only be ignored when the corresponding asset is also ignored
!/[Aa]ssets/**/*.meta

进入你的 .gitignore。然后像往常一样,刷新你的 gitignore

由于最后一行保留(不忽略)位于 Assets 文件夹下的元文件,因此不会忽略 Assets 文件夹内文件夹的元文件。

于 2022-02-15T22:57:12.607 回答
-5

要将元文件与资产一起包含,只需在排除项后添加以下内容:

!*.*.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}

希望有帮助。

于 2013-12-04T16:13:12.240 回答