彻底解决Unity在版本控制git中多余的.meta文件!
假如你和你的团队,使用版本控制软体(SourceTree、Git Tortoise等)协同工作,那么你一定会遇到这样一种情况:
打开版本控制软体,想要提交一个更改,然后发现莫名其妙多了许多你没修改过的.meta文件,你决定将他们撤销后返回Unity。等待下一次打算提交更改时,它们又会继续出现。
一两次还能接受,长期以往,简直体验极差,多出来的一堆.meta文件,无法删除它们,而且你很可能要花时间在解决这些文件的冲突上。甚至在有些情况下,它还会破坏项目中的资源引用信息,导致你不得不回退版本将信息找回来。
这些.meta文件来源于哪些文件?为什么它们无法被撤销?如何彻底解决这样的问题呢?
1 .meta文件
每当你往Unity的Assets文件夹下添加一个文件或文件夹时,Unity会默认为其生成一个同名带.meta后缀的文件。
这些.meta文件往往存储了这个资源文件的id(id是资源引用的凭据)、压缩格式等信息。
.meta文件是Unity不可或缺的一部分但是它也常常会影响你的项目体验。
参考资料:Behind the Scenes
2. 莫名奇妙的.meta文件
以上描绘的无法撤销.meta文件,大部分是因为:
- 这些.meta文件对应的是项目中空文件夹的.meta文件
- 大多数软体使用的版本控制系统,例如git(注:git是一种开源的分散式版本控制系统),会默认不记录空文件夹
- 如果Unity找不到一个.meta文件对应的资源文件,那么Unity会将这个.meta文件删除
这就造成了这样一种情况:
- 你的Unity项目有一个空文件夹,名为"empty", Unity默认为其生成了一个"empty.meta"的文件。
- 你打开版本控制软体,由于git不会记录空文件夹"empty",因此你只看到了一个多的"empty.meta"文件出现在修改列表中。
- 如果你将"empty.meta"文件撤销,很显然,下一次这个文件仍然会继续出现在修改列表中.
- 如果你将"empty.meta"文件提交,同事A拉取了你的提交.由于Unity会删除落单的.meta文件,当A从Unity转到版本控制软体中,会出现"empty.meta"文件被删除的记录.同样,不管撤销,还是提交,这些.meta都会永远保留下来.
是的,这就是为什么你每次想提交资源,总会出现一堆莫名其妙的.meta文件的最主要的原因.
3.怎么彻底删除这些.meta文件
根据上文的叙述,只要每一个协作者都能够删除掉所有项目中空的文件夹,就可以解决这个问题.
这可以很容易地做成一个Unity编辑器工具:.
事实上,AssetStore 有一个免费的非常好用的工具 - Clean Empty Directories - Asset Store