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



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

使用版本控制时,这可能会造成烦人的情况(您可以跳过并转到问题(:有人创建了一个将被忽略的文件文件夹,但忘记忽略该文件夹的元文件。Unity 创建元文件,此人将元添加到版本控制中。另一个人获取变更集,由于他们没有该文件夹,他们的 Unity 会删除元文件,并从版本控制中删除元文件。并非团队中的每个人都明白这一点,因此该过程在地狱循环中永久存在。

令人惊讶的是,这种情况一直在发生。所以,有两个问题:

  1. 对文件夹元文件进行版本控制重要吗?
  2. 有没有办法自动忽略文件夹元文件 - 特别是在 git 或 mercurial 上?

Unity 文档说:

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

对我来说,这足以使它们处于版本控制之下。我看到两种解决问题的方法:

  • 组织:为本地文件夹设置命名约定,例如以"_"开头。但我们都知道这是行不通的;-(
  • 在所有计算机上安装客户端预提交挂钩。我还没有这样做,但它似乎很有希望。

我只是玩了一下不同的 git 命令,以下内容可能很有用:git 钩子脚本首先检查 .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,以及我关于它的博客文章以获取更多详细信息。

将此添加到 .gitignore

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

这将忽略没有后缀的文件。但这应该不会有什么坏处。

是的,.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 .

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

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

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

希望有帮助。

最新更新