忽略版本控制中的文件夹元文件

Unity 为资产文件夹中的 文件夹创建和删除元文件。

当使用版本控制时(你可以跳过这些问题) ,这会造成一个恼人的情况: 有人创建了一个文件夹,其中的文件将被忽略,但是忘记忽略文件夹的元文件。Unity 创建元文件,这个人将元添加到版本控制中。另一个人得到变更集,因为他们没有文件夹,他们的 Unity 删除了元文件,他们从版本控制中删除了元文件。并不是团队中的每个人都明白这一点,所以这个过程在地狱中循环。

令人惊讶的是,这种情况经常发生,所以,有两个问题:

  1. 版本文件夹元文件重要吗?
  2. 有没有一种方法可以自动忽略文件夹元文件-特别是在 git 或 mercurial?
56589 次浏览

联合医院表示:

创建新资产时,确保将资产本身和相关的.meta 文件都添加到版本控制中。

对我来说,这就是把它们置于版本控制之下的充分理由:

  • 组织: 为本地文件夹设置一个变数命名原则,比如从“ _”开始。但是我们都知道这是行不通的; -)
  • 在所有机器上安装一个客户端 提前提交钩子。我还没有这样做,但它似乎很有希望。

我只是尝试了不同的 git 命令,下面的命令可能会很有用: Git hook 脚本应该首先检查.gitignore 是否已经更改:

git diff-index --cached --name-only HEAD | grep ".gitignore"

如果所有新添加的行位于“资产”文件夹下,则在. gitignore 中打印出它们的目录名称:

git diff --cached --word-diff=plain .gitignore | grep -o -e "{+\/.*\/Assets\/.*+}" | cut -d + -f 2

更新

我刚刚编写了这样一个提前提交钩子: ——有关代码,请参阅 GitHub 存储库 Git-预提交-钩子-统一资产和我的 写博客了解更多细节。

要包含元文件和资产,只需在排除之后添加以下内容:

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

希望能帮上忙。

把这个加到. gitignore

#Ignore all .meta file
*.meta
#But not source file with postfix. which is everything but a folder
!*.*.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

然后像往常一样,刷新你的记忆

由于最后一行保留(不忽略)“资产”文件夹下的元文件,因此“资产”文件夹中的文件夹的元文件不会被忽略。