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

Rob*_*rto 58 git version-control mercurial unity-game-engine

Unity为Asset文件夹中的文件创建和删除元文件.

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

令人惊讶的是,这种情况始终存在.那么,有两个问题:

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

Kay*_*Kay 55

统一文档说:

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

对我来说,这是足以将它们置于版本控制之下的原因.我看到两种解决问题的方法:

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

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

git diff-index --cached --name-only HEAD | grep ".gitignore"
Run Code Online (Sandbox Code Playgroud)

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

git diff --cached --word-diff=plain .gitignore | grep -o -e "{+\/.*\/Assets\/.*+}" | cut -d + -f 2
Run Code Online (Sandbox Code Playgroud)

更新

我刚写了这样一个预提交钩子:-)请参阅GitHub存储库git-pre-commit-hook-unity-assets代码和我的博客文章,了解更多细节.


小智 6

将此添加到 .gitignore

#Ignore all .meta file
*.meta
#But not source file with postfix. which is everything but a folder
!*.*.meta
Run Code Online (Sandbox Code Playgroud)

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

  • +1。但是,虽然这在大多数情况下都很好,但如果您的文件夹包含点 (.),就像在 Android 插件中一样,那么无论如何都会包含文件夹元数据。 (4认同)