本文节选自洪流学堂公众号技术专栏《大话Unity2018》,未经允许不可转载。

洪流学堂公众号回复专栏,查看更多专栏文章。

小新:“我昨天尝试了一下使用Git来管理Unity项目,感觉不太顺利。管理Unity项目有什么需要特别注意的地方么?”

大智:“对于Git管理的任何项目,需要注意的地方大多都是共通的,今天我们就来一起学一下使用Git管理Unity项目的一些最佳实践。”

Git最佳实践

在说Unity与Git之前,我们先来看一下一些Git的通用最佳实践是什么。

提交相关的变化
一次提交应该是相关联的修改。如果是修改了两个不同的BUG,应该分两次提交。小的commit可以让你的协作者更容易理解,并且一旦出现问题可以很容易回退版本。

经常提交
经常提交可以确保你的提交足够小,并且提交相关联的变化,还可以减少代码冲突。

不要提交没做完的工作
这不是说你要完成一个完整的功能才能提交,而是要将功能拆分,然后经常提交。不能让协作者拿到你的代码后出现编译错误、系统不能运行等情况。

提交之前应该测试
提交之前应该进行测试,不要让你的代码影响别人的工作。

重视提交Message
提交Message应该清楚地写明和本次提交相关的内容(不超过25个字)。如果需要填写更详细的内容,空一行后写下具体的提交信息。

很多童鞋经常着急提交,Message经常写一些无关的字符来满足提交的需求,这种坏习惯总有一天会害了你自己。

版本控制不是备份系统
版本控制虽说可以备份你的项目,但是不要把Git当作一个备份的工具。不要将你本地的乱七八糟的文件都使用Git进行备份。记住Git是用来进行版本管理的,是用来跟踪管理这些文件的变化。

多用分支
分支是Git最强大的功能之一。你应该多使用分支来拓宽开发的工作流:新功能、BUG修复、新创意等等。

团队内就工作流程达成一致
Git给了你很多选择,比如划分几个分支,什么时候开辟新的分支,merge还是rebase等等。这些都应该基于你的项目进行选择,并且在团队中达成一致后严格执行。

Unity与Git

在理解并执行上述的Git最佳实践之后,我们再来看Git在Unity中有哪些特殊的地方。

使用Git管理Unity项目一般流程如下:

  1. 在托管平台(之前介绍过多个国内外的托管平台,也可以自建)上创建Git项目
  2. 在本地Clone创建的项目
  3. 创建Unity工程到该版本库目录中
  4. 设置Unity工程的一些配置
  5. 设置gitignore文件
  6. commit和push,在Git的保驾护航下开始愉快地开发Unity项目!

配置Unity的文件属性

为什么需要配置Unity的文件属性呢?这也是基于Git的一些原则:

  • Git无法合并二进制文件,尽量避免会发生变化的文件使用二进制格式
  • 一个Git版本库应该是一个完整的项目,需要包含项目可运行调试的所有代码、配置文件和资源。

通常Unity中需要设置的内容有以下几项:

设置Asset Serialization为Force Text

上面提到了,Git无法处理二进制文件的合并,只能处理文本文件的合并。如果二进制文件出现了冲突,那只能选择一个文件保留,无法将两个文件进行合并。对于Unity中的文件,我们需要尽量避免这种情况。

默认情况下,Unity的资产序列化模式是Mixed。

资产序列化有三种模式:

  • Mixed:混合模式,保持资产原来的序列化的模式,新的资产使用二进制的方式序列化。
  • Force Binary:强制二进制,如果不需要合并,可以使用二进制模式节省存储空间。如果一个项目只有你一个人开发,不会出现合并的情况,可以使用这个模式。
  • Force Text:强制文本模式。只要你的项目有多个人一起开发,就需要将资产序列化的模式设置为这个模式。

设置Version Control为Meta Files

Unity的Editor设置中,Version Control的Mode需要设置为Meta Files。
对于使用新版本Unity的童鞋,一般不需要进行额外设置,默认为Visible Meta Files,只需要检查一下即可。

一共有4种模式:

  • Hidden Meta Files:隐藏的Meta文件,即该文件的属性是隐藏的,在系统中如果不查看隐藏文件这些文件是看不到的。如果你不想看到这些Meta Files,你可以设置为该选项。
  • Visible Meta Files:可见的Meta文件。
  • Perforce:Unity内置的一种版本控制工具。
  • PlasticSCM:Unity内置的一种版本控制工具。

什么是Meta文件?
Meta文件在Unity中用来跟踪资产文件的一些信息,比如元数据、资产之间的关联等,是非常重要的一种数据,不能删除。删除后可能会丢失文件之间的关联信息。

在较旧版本的Unity中,还有一个Off的选项,选中这个选项时Unity不会生成meta文件,资产文件之间的关联都存储在临时文件中,使用版本控制管理时会造成关联丢失。

使用Git时,一定要选中Meta Files这个选项。

设置好Gitignore

提前设置好gitignore文件可以防止将临时文件及不需要版本控制的文件提交到版本库中。

对于Unity工程自动生成的文件夹,只有下面几个目录是需要加入版本控制的:

  • Assets
  • ProjectSettings
  • Packages

其他Unity自动生成的文件和文件加不需要加入版本控制,但是需要注意将你自己创建的文件或者文件夹加入版本控制。

Github中的Unity项目的gitignore文件是最好的初始模板:
https://github.com/github/gitignore/blob/master/Unity.gitignore

[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
Assets/AssetStoreTools*# Visual Studio cache directory
.vs/# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.opendb# Unity3D generated meta files
*.pidb.meta
*.pdb.meta# Unity3D Generated File On Crash Reports
sysinfo.txt# Builds
*.apk
*.unitypackage

注意:gitignore文件可能随着项目的开发过程而发生变化,要注意根据项目的实际情况进行维护。

不要将大文件放入git管理

项目中可能有很大的文件比如参考资料、视频、发布的程序等。这些尺寸很大、几乎不会变化的文件建议使用网盘等方式在团队之间共享,不要放到Git版本库中。

尽量不将美术中间文件放到工程中

在Unity项目的开发过程中经常会有比较大的文件:比如贴图的原始PSD文件,模型的原始max文件等。这些文件一般情况会很大,尽量不要放到Git中进行管理。在版本库中存储的文件尽量是最终的图片或fbx格式的文件。

注意:这条建议也并非绝对,有时候使用psd或max文件可能更合理,需要自行判断。

总结

在Unity项目中使用Git进行管理,需要注意以下流程:

  1. 在托管平台上创建Git项目
  2. 在本地Clone创建的项目
  3. 创建Unity工程到该版本库目录中
  4. 设置Unity工程的一些配置(Asset Serialization设置为Force Text)
  5. 设置gitignore文件(参考Github提供的gitignore文件)
  6. commit和push,在Git的保驾护航下开始愉快地开发Unity项目!

今日思考题

大智:“有了Git以后,再也不用担心代码出现什么问题了,你需要记住的就是及时commit&push!”
小新:“好嘞!”
大智:“收获别忘了分享出来!也别忘了分享给你学Unity的朋友,也许能够帮到他。”

洪流学堂公众号回复专栏,查看更多专栏文章。


《郑洪智的Unity2018课》,倾尽我8年的开发经验,结合最新的Unity2018,带你从入门到精通。
所有订阅《大话Unity2018》的用户,可在《大话Unity2019》上线时获得1元换购资格。

[专栏精选]Unity中的Git最佳实践相关推荐

  1. [专栏精选]Unity中编码Encoding脱坑指南

    本文节选自洪流学堂公众号技术专栏<大话Unity2018>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 洪流学堂,让你快人几步.你好,我是郑洪智. 大智:"昨 ...

  2. [专栏精选]Unity中动态构建NavMesh

    本文节选自洪流学堂公众号专栏<郑洪智的Unity2018课>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 小新:"Unity内置的Navigation系统是不 ...

  3. git 打tag_图文讲解,团队开发中的 Git 最佳实践

    私信我,回复:学习,获取免费学习资源包. 在 2005 年的某一天,Linux 之父 Linus Torvalds 发布了他的又一个里程碑作品--Git.它的出现改变了软件开发流程,大大地提高了开发流 ...

  4. 图文讲解,团队开发中的 Git 最佳实践

    在 2005 年的某一天,Linux 之父 Linus Torvalds 发布了他的又一个里程碑作品--Git.它的出现改变了软件开发流程,大大地提高了开发流畅度!直到现在仍十分流行,完全没有衰退的迹 ...

  5. git最佳实践_Git最佳实践如何为我节省大量的返工时间

    git最佳实践 by Hemal Patel 通过赫马尔·帕特尔 Git最佳实践如何为我节省大量的返工时间 (How Git best practices saved me hours of rewo ...

  6. Git 最佳实践:分支管理

    5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...

  7. Git最佳实践(init、config、status、add、commit、diff、push) 1.0v

    Git最佳实践 工程设计领域中使用版本控制来管理工程蓝图的设计过程,在IT开发过程中借鉴了版本控制思想管理代码的版本迭代. Git是一个开源的分布式版本控制系统,最初由Linus Torvalds创作 ...

  8. 干货:基于 Git Flow 的 Git 最佳实践(附加解决大家经常碰到的问题)

    干货:基于 Git Flow 的 Git 最佳实践(附加解决大家经常碰到的问题) 参考文章: (1)干货:基于 Git Flow 的 Git 最佳实践(附加解决大家经常碰到的问题) (2)https: ...

  9. Zeno节点系统中的C++最佳实践

    文章目录 1.经典的多态案例 (1)多态用于设计模式之"模板模式" (2)shared_ptr 如何深拷贝? (3)能把拷贝构造函数也作为虚函数? 5.CRTP 6.类型擦除 7. ...

最新文章

  1. 苏黎世华人博士提出模型SwinIR,只用33%的参数量就碾压图像修复领域sota
  2. Zabbix-3.0.3结合Grafana-3.1.0给你想要的绘图
  3. centos 管道符取第一行_CentOS 7 文件操作命令
  4. python地理空间分析指南pdf邓世超_Python地理空间分析指南(第2版)源代码.zip
  5. AD域控exchange邮箱—powershell 程序暂停sleep 继续执行的方法
  6. 如何让你的 Git 历史保持“干净”?!
  7. iis启动服务时提示在本地计算机 无法启动iis admin服务,无法启动IIS Express Web服务器...
  8. ARM、DSP、FPGA比较——非常详细深入
  9. python列表所有元素平均值_python—组合数据类型
  10. 思岚A1M8激光雷达-ubuntu18.04-slam建图参考
  11. python毕业设计总结范文大全_毕业设计总结【范文】
  12. 深度学习为什么会出现validation accuracy大于train accuracy的现象?
  13. unbuntu20.0.4 显卡驱动安装,nividia-smi无效
  14. Ubuntu_18.04安装网易云音乐
  15. 利用SpringBoot返回一个json对象
  16. 私人 — 在 Apple 商务管理或 Apple 校园教务管理上作为自定 App 提供
  17. 贝壳找房算数(中等)
  18. DevTools 无法加载源映射: 无法加载http://localhost:8080/css/bootstrap.css.map 的内容:HTTP 错误: 状态代码 404,net::ERR_HTT
  19. 如何判别一篇文章是会议还是期刊
  20. centos7下面php5.6添加postgresql相关扩展【试行】

热门文章

  1. JavaScript对象学习笔记
  2. 一致性hash算法虚拟节点_一致性 Hash 算法
  3. python把字符串3des加密_Python干货之六大密码学编程库
  4. jtextpane设置不能选中_你会设置数据有效性吗?
  5. common java socket,JAVA I/O(四)网络Socket和ServerSocket
  6. 蓝色中国风传统图案背景素材
  7. 圣诞节手绘插画素材,点燃节日温情
  8. 万圣节主题海报设计,少不了的素材
  9. 电商app中的商品列表UX框架要如何设计?
  10. 为什么c语言乘除法优先级低,C语言训练题.docx