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

时间:2013-10-03 05:12:39

标签: git version-control mercurial unity3d

Unity在Asset文件夹中创建和删除文件夹的元文件。

使用版本控制时可能会产生烦人的情况(您可以跳过并转到问题):有人会创建一个文件夹,但会忽略该文件夹的元文件。 Unity创建元文件,此人将元添加到版本控制。另一个人获得变更集,由于他没有该文件夹,他的Unity删除了元文件,他从版本控制中删除了元文件。并非团队中的每个人都明白这一点,因此这个过程会在地狱中延续下去。

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

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

3 个答案:

答案 0 :(得分:54)

Unity docs说:

  

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

对我而言,这足以让他们置于版本控制之下。我看到两种解决问题的方法:

  • 组织:为本地文件夹设置命名约定,例如以“_”开头。但我们都知道这不起作用; - )
  • 在所有计算机上安装客户端pre-commit hook。我还没有这样做,但似乎很有希望。

我刚刚玩了不同的git命令,以下内容可能很有用: git hook脚本首先检查.gitignore是否已更改:

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

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

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

<强>更新

我刚刚编写了这样一个预提交钩子:-)有关代码,请参阅GitHub存储库git-pre-commit-hook-unity-assets,有关详细信息,请参阅我的blog posting

答案 1 :(得分:3)

将此添加到.gitignore

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

这将忽略不带后缀的文件。但这不应该受伤。

答案 2 :(得分:-6)

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

!*.*.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}
希望有所帮助。