徹底解決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