如何优雅地备份Unity工程

前言

不开玩笑的说,我在Reddit上看到过一个帖子,楼主问大家备份Unity工程的频率。

2cad664e250041febf7a676630104293.jpg  

我猜你看到这就已经开始笑了,别笑,当年你我都是这么过来的。我不以偏概全哈,我只说我的情况,当年我也是玩游戏玩的沉迷,老爸学的数据库,他治疗游戏沉迷的方法就是引导我去分析游戏的原理。我也就这么入坑了。

初中时候做unity的时候,那时候还没接触到版本控制这个事,那时候家里限制我每周末能碰电脑,所以只能周六日写点,周日晚上备份。那时候还真的是右键工程目录,WinRAR分卷压缩,传到百度网盘。

(一说做unity都做了十年,还好实习还和unity相关,也算满足自己的一个小心愿)

好了,言归正传。

文件夹结构

无论你是用版本控制还是像小时候意气风发的我用WinRAR压缩备份,你都避不开选择性忽略文件夹。因为,如果你完整备份,最后的结果就是压缩文件离奇的大,这肯定是能做优化的。

虽说现在硬盘白菜价,但不能这么造。

我们先看一下文件夹结构,以我在Github上托管的UniGPT项目为例:

Mode                 LastWriteTime         Length Name                                                                 
----                 -------------         ------ ----                                                                 
d-----         2023/10/1     18:08                .vscode                                                              
d-----         2023/10/1     18:08                Assets                                                               
d-----         2023/10/1     18:08                Build                                                                
d-----         2023/10/1     18:11                Library                                                              
d-----         2023/10/1     18:11                Logs                                                                 
d-----         2023/10/1     18:11                obj                                                                  
d-----         2023/10/1     18:11                Packages                                                             
d-----         2023/10/1     18:11                ProjectSettings                                                      
d-----         2023/10/1     18:11                Temp                                                                 
d-----         2023/10/1     18:11                UserSettings                                                         
-a----         2023/8/18     18:04            118 .gitattributes                                                       
-a----         2023/8/11     11:00           1371 .gitignore                                                           
-a----         2023/7/23      2:33             99 .vsconfig                                                            
-a----         2023/7/20     19:12          69883 Assembly-CSharp-Editor-firstpass.csproj                              
-a----         2023/7/20     19:32          76292 Assembly-CSharp-firstpass.csproj                                     
-a----         2023/9/18     23:46          70892 Assembly-CSharp.csproj                                               
-a----          2023/9/8     13:58          61465 Assembly-CSharp.Player.csproj                                        
-a----         2023/10/2      0:02              0 dir.txt                                                              
-a----         2023/7/20     19:32          70883 EasySave3.csproj                                                     
-a----         2023/9/11     16:44          58000 IngameDebugConsole.Editor.csproj                                     
-a----         2023/9/11     16:44          56675 IngameDebugConsole.Runtime.csproj                                    
-a----          2023/9/8     13:53          51086 IngameDebugConsole.Runtime.Player.csproj                             
-a----         2023/9/11     16:44          57174 kcp2k.csproj                                                         
-a----          2023/9/8     13:53          51592 kcp2k.Player.csproj                                                  
-a----         2023/8/30     20:42          58701 LeTai.TranslucentImage.csproj                                        
-a----         2023/8/30     20:42          57143 LeTai.TranslucentImage.Demo.csproj                                   
-a----         2023/8/30     20:42          52486 LeTai.TranslucentImage.Demo.Player.csproj                            
-a----         2023/8/30     20:42          58453 LeTai.TranslucentImage.Editor.csproj                                 
-a----         2023/8/30     20:42          54030 LeTai.TranslucentImage.Player.csproj                                 
-a----         2023/8/30     20:42          56765 LeTai.TranslucentImage.UniversalRP.csproj                            
-a----         2023/8/30     20:42          57955 LeTai.TranslucentImage.UniversalRP.Editor.csproj                     
-a----         2023/8/30     20:42          52108 LeTai.TranslucentImage.UniversalRP.Player.csproj                     
-a----          2023/7/2     23:24           1523 LICENSE                                                              
-a----         2023/9/11     16:44          55416 Mirror.Authenticators.csproj                                         
-a----          2023/9/8     13:53          49856 Mirror.Authenticators.Player.csproj                                  
-a----         2023/9/11     16:44          57764 Mirror.CompilerSymbols.csproj                                        
-a----         2023/9/11     16:44          58494 Mirror.Components.csproj                                             
-a----          2023/9/8     13:53          52899 Mirror.Components.Player.csproj                                      
-a----         2023/9/11     16:44          63345 Mirror.csproj                                                        
-a----         2023/9/11     16:44          59453 Mirror.Editor.csproj                                                 
-a----         2023/9/11     16:44          62697 Mirror.Examples.csproj                                               
-a----          2023/9/8     13:53          57060 Mirror.Examples.Player.csproj                                        
-a----          2023/9/8     13:53          57463 Mirror.Player.csproj                                                 
-a----         2023/9/11     16:44          56183 Mirror.Transports.csproj                                             
-a----          2023/9/8     13:53          50661 Mirror.Transports.Player.csproj                                      
-a----         2023/9/11     16:44          57772 NativeGallery.Editor.csproj                                          
-a----         2023/9/11     16:44          55606 NativeGallery.Runtime.csproj                                         
-a----          2023/9/8     13:53          50028 NativeGallery.Runtime.Player.csproj                                  
-a----         2023/9/11     16:44          57764 NativeShare.Editor.csproj                                            
-a----         2023/9/11     16:44          55403 NativeShare.Runtime.csproj                                           
-a----          2023/9/8     13:53          49827 NativeShare.Runtime.Player.csproj                                    
-a----         2023/8/24     12:47            373 README.md                                                            
-a----         2023/9/11     16:44          56038 SFB.csproj                                                           
-a----          2023/9/8     13:53          50620 SFB.Player.csproj                                                    
-a----         2023/9/11     16:44          57538 SimpleWebTransport.csproj                                            
-a----          2023/9/8     13:53          51941 SimpleWebTransport.Player.csproj                                     
-a----         2023/9/11     16:44          56430 Telepathy.csproj                                                     
-a----          2023/9/8     13:53          50843 Telepathy.Player.csproj                                              
-a----         2023/9/11     16:44          58657 UniGPT.csproj                                                        
-a----         2023/9/11     16:44          59755 UniGPT.Editor.csproj                                                 
-a----          2023/9/8     13:53          52720 UniGPT.Player.csproj                                                 
-a----         2023/9/16     23:11           6691 UniGPT.sln                                                           
-a----         2023/9/11     16:44          56564 Unity.Mirror.CodeGen.csproj                                          


Assets文件夹是资产文件夹,模型、脚本都在里面。

Build文件夹是打包存放的文件夹,比如Android的APK,Windows的EXE等。(这个看个人习惯,毕竟打包路径是可以自定义的,一般规范是Build),可以从备份中忽略。

Library文件夹,这非常的重点,这个文件夹是存放本机一些缓存的地方,比如你的Package缓存、场景缓存什么的。你说你备份要它何用?这玩意一个机器一个样,换到别的机器,这Library文件夹里有相当一部分要重新import。哪怕就是本机用,不涉及到协作,脚本啥的搞砸了,直接把Assets文件夹里的对应内容替换不香吗?所以请从备份中忽略,我保证,你这原本备份的大小至少减了一半。

Logs文件夹就不用说了,存放日志的地方,忽略掉。

obj是调试文件夹,也忽略。

Packages就是存放工程用到的Package的列表(指Unity Package Manager)。

ProjectSettings就不用说了,工程配置文件。

Temp,顾名思义,直接忽略。

UserSettings,一般都是编辑器布局那些玩意,这个你随意。

其他留着就可以啦。

版本控制

我估计看到这的朋友一定是受够了上文中的笨拙备份方式,毕竟每次备份就相当于全量备份。

既然想避免全量备份,肯定少不了版本控制系统。

目前有两大版本控制系统,Git和SVN。

SVN是传统的CVS,也是很多前辈入坑版本控制的首选(也是美术人员的首选),毕竟你只要操心两件事,checkout和commit就完了。目前最好用的客户端是小乌龟TortoiseSVN。它嵌入到你的Windows资源管理器,高度契合用户的Windows使用习惯。但是缺点也很明显,笨拙。

一个是第一次checkout时间会很漫长(包括第一次传工程,毕竟它不压缩),另一个是切分支麻烦。

什么时候你会用到分支?比如你要开发一个新功能,一般一个新功能就是一个分支,主分支是目前的稳定版本(或者你理解成大版本、小版本的关系)。SVN说白了就是开一个分支相当于完整地checkout一个工程副本出来,可想而知。

那么有没有软件改善呢?有,那就是Git。

Git这个东西从Linux过来的,发明人我想大家都知道是谁,那个暴躁老哥Linus。Git这个名字如果你看过百科的话,它的寓意是愚蠢的人。这也和它的分布式理念有关,Linus认为所有人不可能按照规则走,所以一定要自己有个人的版本,这样避免一个人搞砸连累其他人。(这也说明SVN是中心式)

Git的传输也是压缩过的,所以很快,而且不太占地方。

Git另一大特点就是指针,你工程里的每个文件以及改动都有指针对应,所以切分支这个事对于Git来说就是把指针改一下的事情,所以非常快。

当然缺点就在于上手比较难,我实习第一天就干出来了force push(切分支pull的时候出冲突了,然而不知道怎么解决冲突),把其他人的改动都干没了。其次就是它的习惯和Linux密不可分,如果你不熟悉Linux,那么上手也有点困难,毕竟它涉及到SSH这个东西,包括搭建起来一个服务器也是。(如果你用Github、Gitee托管,那当我没说,我也推荐新手先用这些公共的源代码托管平台入门,但日后还得学自己怎么搭建。

但目前主流都是git,所以建议是早日投入git怀抱,其实也不难,只要你能想明白树和树干的关系就好了。然后就是耐心点,多沟通,解决冲突。

git的客户端就很多了,GitExtension、Fork、SourceTree等等,找一个你看着顺眼的即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值