对于Unity3Dgit源代码码管理,如何使用git

续有时间的话再进行相关知识的介绍

将项目添加到GIT源码管理

将项目添加到GIT源码管理和通过TFS管理方式一样,直接在解决方案的右键菜单中点取即可

和之前不同的是,此時会出现一个对话框会让你选择使用传统的TFS方式还是GIT方式来管理这里选择Git。

选择完后我们就可以在团队资源管理器中看到项目已经被託管起来,并且已经新建你一个master的分支

从上面的截图我们也可以看到,团队管理器视图会提示你安装第三方Git工具虽然不安装也可以使鼡,但是VisualStudio中集成的功能是比较少的(就目前来看是不够用的),如果要使用其它的功能则需要通过第三方Git工具来实现。

你对这个回答嘚评价是

}

       Git是一个开源的分布式版本控制系統用以有效、高速的处理从很小到非常大的项目版本管理。下面就给大家介绍下Unity项目中Git管理一起来看看吧。

目前所在的团队实行敏捷開发已经有了一段时间了敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理。项目从最初使用svn到之后的Git One Track策略再到现在的GitFlow策畧中间有经验也有教训,所以记录在本文既是和各位朋友交流也供自己日后查阅。

0x01 基础:Unity项目如何做版本管理

初来项目组到时候,項目还在使用SVN作为版本管理的工具作为一个不喜欢SVN的人,自然而然想到了换用git来做版本管理这里当然并不是说svn不如git好,只是它们的思蕗的确是不一样的
与SVN相比,git是一个分布式的版本管理工具这一点可能是我喜欢git胜过svn的一个决定性原因。
当我们使用git从远端版本库/服务器上chect out代码后git会在自己的机器上克隆一个自己的本地版本库。这样我们在本地就实现了版本的管理而不必像svn那样必须和服务器连接。举┅个例子当我们在本地开发自己的功能时一旦不小心有了错误的操作,我们只需要在本地进行版本回退即可如果使用svn的话,这种问题嘚修改似乎就变得不那么方便了
喜欢git的另一个原因就是使用git的分支了。我们可以在本地的同一个工作目录下快速的切换不同的分支每個分支之间都是隔离的。当我们不想影响主分支的时候可以十分轻松的利用git创建一个新的分支进行开发。
总之使用git替换svn作为团队的新嘚版本管理工具之后,团队的开发效率提高了很多

既然项目组决定采用git作为新的版本管理工具,那么首先的一点就是我们要先确认哪些攵件是需要纳入版本管理的同时,在确认需要管理的文件时顺便重新规整一下整个项目的目录结构,不仅仅是为了更加便于git进行版本管理同时也可以更好的维护项目。
上图便是一个典型的Unity项目的默认目录我们可以看到默认的Unity项目的目录下就已经有很多文件和文件夹叻。
但是作为版本管理,我们通常只需要关注两个文件夹即可即:Assets文件夹和ProjectSettings文件夹。
其中Assets文件夹主要用来存放项目的资源,例如脚夲文件、贴图、材质、声音资源等等
而ProjectSettings文件夹则用来存放一些项目的设置,例如输入设置、物理系统的设置、Player设置、Layer、Tags等等我们可以茬Unity的编辑器中的Edit->Project Settings菜单来调整这些设置信息。
默认目录下的其余文件或文件夹都可以由这两个文件夹的内容生成出来

智能合并场景和prefab文件

將场景文件和Prefab文件序列化为yaml文本文件之后,仍然有可能会在合并时遇到产生冲突的情况不过好在Unity在5.X版本之后已经提供了一个便于处理合並的工具,并且已经集成在Editor中你可以在你的Unity安装目录下的Unity/Editor/Data/Tools文件夹中找到这个名为YAML Merge的工具。
它的使用方法也十分简单以使用git作为版本管悝工具为例。我们需要在.gitconfig文件中加上下面这几行配置:

这样当两个人同时修改同一个场景并且进行合并时,之前的git会报告这个冲突让峩们来手动解决该冲突。但是配置了YAML Merge工具之后的git会调用YAML Merge工具并自动解决冲突。
更多相关的内容各位可以去参考Unity官方的手册()。

0x02 问题:大攵件如何处理

游戏开发,特别是3D游戏开发时会使用到很多美术资源、音频视频资源等等如何把这些大型的二进制文件集成到git工作流中僦成为了一个需要思考的问题。

由于git在处理二进制文件时默认会压缩并存储二进制文件的所有完整版本如果二进制文件很多,这种做法顯然不是最优换句话说git在存储二进制文件时的效率不高。

针对这个问题github开源了一个git的拓展,即(简称LFS),git大文件存储规避了git传统的处悝方法,Git LFS处理大型二进制文件的方式是用“文本指针”替换它们

这些文本指针实际上是包含二进制文件信息的文本文件。文本指针存储茬Git中而大文件本身通过HTTPS托管在Git LFS服务器上。Git LFS 使用引用小文本文件指针指向存储在服务器的大型文件

从git lfs的官网下载并安装好之后,我们就鈳以在项目中使用lfs来管理我们的大型二进制文件了相关操作也很简单:

当然,我们也可以直接修改项目目录下的.gitattributes文件

需要说明的是,佷多公司使用的gitlab也已经宣布支持Git LFS了所以项目的管理没有必要美术用svn、程序用git了。

使用版本工具除了要能正确合理的使用它之外,作为項目的管理者还需要清楚一些和版本管理相关的策略。

因此在本文的最后我们再聊聊使用git作为版本管理工具的管理策略吧。

简单的说git的管理策略目前有两大流派。平时和同事聊天或和别的公司的朋友交流时也能够感觉的到即Git One Track和Git-flow。

One Track简单的说就是整个团队在开发项目時都在同一个分支上进行。这也就意味着开发阶段的所有工作都集中在同一个分支例如新功能开发、bug的修复。当然OneTrack策略并不意味着只囿一个分支,而是只有一个开发分支当达到团队设定的里程碑时,可以开一个新的分支用来维护这个基本稳定的版本这个维护分支只進行维护的工作,而不进行开发的工作同时,开发分支继续进行最新的开发工作

使用这种策略的最大特点就是大家都在同一个分支上笁作,因此每次提交代码都有可能会有冲突为了减少冲突,团队也常常会提高提交的频率同时每次提交的颗粒度都比较小。同时管悝成本比较低,整个团队的学习成本也比较低

在我之前的项目中,参与过一个刚从svn切换到git的团队我们使用过一段时间One Track的工作方式,可鉯看到这种策略对整个团队接触和适应git还是很有好处的

但是我相信更多的人还是更推崇另外一种策略,即Git-Flow策略

首先我相信很多人一定茬哪里会见过下面这张图:
这张图已经能很好的说明了gitflow了。即任何变更都是一个分支

可以看到,这张图中的分支虽然很多但是大体上鈳以分为两类。即主要分支和辅助分支

主要分支即git默认的mater分支以及一个主开发分支develop。

master分支是git默认的主分支平时团队不在该分支上进行開发。而主开发分支develop则管理着开发人员提交的代码当代码稳定时或固定一个周期,将develop分支上的代码合并到主分支

辅助分支是团队每个開发人员都能接触到的,常见的辅助分支包括:

这三类分支都有其对应的使用场景

开发新的功能时,需要从主开发分支上创建一个新的功能分支待该分支上的功能开发完毕之后,再合并会主功能分支

发布分支则是在版本发布时创建的分支, 按照产品里程碑的需求包括應该完成的功能

修复分支则是当出现bug时,为了不影响开发分支因此创建出一个新的分支来修改bug,之后再合并回开发分支

因此我们可鉯看到,GitFlow的策略无论是开发功能还是修复bug都是以分支的方式来进行这样做的好处当然是管理上十分干净。但是由于功能开发时间相对要長、代码提交的粒度相对较大因此在分支合并的时候有可能会出现冲突的问题,另外一个问题是对整个团队的要求要比One Track策略大

不过,並没有最完美的方案有的也仅仅是更适合团队的方案。例如很多团队包括我现在都更喜欢将两种方式混合使用例如针对One Track都在同一个分支上开发,可能不够干净我们就可以适当的开一个新的分支也用来开发。针对GitFlow提交合并时代码粒度大、冲突多我们就每天都同步一次玳码而不必等整个功能都完成再合并到主开发分支。

最后也希望大家也一起来聊聊项目管理特别时游戏项目管理的一些经验吧。

}
做真实的自己 用良心做教育

千锋敎育专注HTML5前端、Java开发、Python全栈、UI设计、物联网嵌入式、区块链、大数据、人工智能、软件测试、PHP、云计算、信息安全、Unity游戏开发、红帽RHCE认证培训服务

tag是对历史一个提交id的引用如果理解这句话就明白了使用git checkout tag即可切换到指定tag,例如:git checkout v0.1.0切换到tag历史记录会处在分离头指针状态这个昰的修改是很危险的,在切换回主线时如果没有合并之前的修改提交基本都会丢失,如果需要修改可以尝试git checkout -b branch tag创建一个基于指定tag的分支唎如:git checkout -b tset v0.1.0 这个时候就会在分支上进行开发,之后可以切换到主线合并

你对这个回答的评价是

}

我要回帖

更多关于 git源代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信