[Unity] Unity3D版本控制(Git+SourceTree)

查看:1091 |回复:4 | 2018-9-19 10:23:58

您需要 登录 才可以下载或查看,没有账号?注册

x
此篇博文主要分享我在工作中使用Git+Sourcetree进行Unity项目版本控制的经验,如有不足,请指正!
此博文为本人在蛮牛首发,后复制过来,不涉及侵权。如果因水印问题不便发布,将在后期更换图片,去除水印。
一、Git
    Git是2005年林纳斯·托瓦兹为了对Linux内核开发进行版本控制而开发的一个分布式版本控制软件。因为他觉得CVS架构不好使,而当时流行的Bitkeeper是一款专有软件,与Linux的开源思想有些差异,林纳斯与BitMove协商无果后,于是用10天时间开发出了第一个版本的Git。
1.Git的安装
    Git的下载地址为:https://git-scm.com/download/win,根据自己电脑系统选择下载。
020103xtzicittstuta9at.jpg

    Git安装过程看似繁杂,有很多选项,有点迷,但不用管他们,选择好安装路径,一路Next就可以了。
2.创建SSH密钥/公钥
    大多数Git服务器都使用SSH公钥进行认证。在使用Git前,必须要确认自己的电脑上是否有SSH公钥及密钥,一般来说,其存在于C:\Users\用户名\.ssh\目录下。如果该目录下没有,那我们就需要使用Git来创建SSH密钥/公钥了。
(1)确认是否存在.ssh文件夹
    在电脑桌面右键,选择Git Bash Here,会弹出如下窗口,输入cd ~/.ssh,会提示No such file or directory,说明我们电脑上没有.ssh文件夹。
020125f5h15wngqgn64b5w.jpg
(2)创建密钥
    输入ssh-keygen,来创建SSH密钥,这里会提示选择SSH密钥创建的位置,直接回车是默认在之前的用户目录下创建。

    然后会让我们输入密码,密码也可以为空,一般我个人选择直接为空。注意,如果输入密码的话,窗口里是不显示的,不要误以为自己的键盘坏了23333 。创建成功了会有类似如下的显示。

    此时我们再去找.ssh文件夹,会发现该目录已经被创建,且存在有id_rsa与id_rsa.pub两个文件,前者是我们所说的SSH密钥,后者即为SSH公钥

    至此,我们的Git安装已经完成,下面将介绍SourceTree的安装与使用。
二、SourceTree
    SourceTree是一款Git GUI软件,同时Git有自带的Git for windows以及Github的Github for windows等其他GUI软件,这里主要介绍SourceTree的使用。
1.SouceTree的安装
    Soucetree官网:https://www.sourcetreeapp.com/

    下载完成后启动SourceTree,在这一步,我们需要登陆,我选择的是Atlassian账户登陆,然后可以选择谷歌账户一键登录(此处需要梯子),如果没有梯子或者不想翻墙的话,自行百度SourceTree安装如何跳过登陆。

    登陆完成后,在安装工具选项中,它会检测到我们已经安装到的Git,下边的Mercurial不需要勾选。

    如果你成功进入这个界面,说明你的SourceTree已经成功安装了。

2.SourceTree中SSH密钥的配置
    在配置密钥前,SourceTree应该会弹出提示框,需要填用户名和邮箱,这个是在推送的时候,用来显示推送人的信息的,之后可以在工具->选项中进行修改。
    打开工具->选项,按照如图配置,即完成了SSH密钥的配置。

三、SourceTree的使用
1.选择你的仓库
    目前网上可选的仓库有很多,国外的GitHub、Bitbucket,国内的阿里云、码云(Gitee)、Coding.net,有条件的公司会搭建Gitlab等等,但是国外的仓库访问速度较慢,这里我们以Gitee进行举例,可以根据个人喜好选择,每个仓库都有其各自的优点,一般来说,主要的参数有:推送拉取的速度,可创建项目的数量,项目的权限是公有还是私有,单个项目的容量,提交时最大文件大小限制,是否支持Git LFS。
2.为仓库添加SSH公钥
    不管选择哪一个仓库,都要将Git生成的SSH公钥添加进去,否则将无法进行代码的拉取推送。在个人设置里,选择SSH公钥,以文本方式打开之前生成的id_rsa.pub,将内容复制进去,并填入个人比较容易记住的标题,以便于区分。

3.创建项目
    选择创建项目,填入相应的信息。如果你选择的仓库这里的.gitignore没有Unity选项,那么可以在克隆项目之后个人进行创建。

4.克隆项目

    在项目主页,我们可以选择https或者ssh两种方式对项目进行克隆。Https在每次进行拉取和推送操作时都需要输入仓库的账号和密码,较为麻烦,而SSH则需要确保配置好了SSH公钥,且你必须是项目的拥有者或协同开发人员。
    选择好克隆方式之后,我们打开SourceTree,点击克隆,将刚才复制的克隆地址添加进去,选择克隆。显示下图内容,即表示克隆成功。


    打开文件夹,会存在以下文件。

5.提交、推送
    对于刚才克隆的文件夹,如果我们有已经存在的项目,则将项目的Assets文件夹与ProjectSetting文件夹拷贝进来,如果没有,则在该目录下创建Assets文件夹,然后使用Unity打开即可。
    然后我们在项目中新建一个TestSript脚本,并保存场景为TestScene,再打开SourceTree,此时界面会发生如下变化。

    红框内的四个文件,即我们刚才创建的脚本和保存的场景以及其对应的.meta文件,下方的是Unity自动生成的ProjectSetting文件夹。而其他的文件夹,如Library,因为我们不需要对其进行版本控制,已经将其添加进.gitignore文件中,所以这里会被自动忽略掉。下面我们对这个界面的主要功能区域进行介绍。

    如图,区域2是未暂存文件,我们每次对项目进行的修改都会显示在这里,如果我们选择任意一项,区域3则会显示出该修改的内容。区域1是暂存区,确认文件的修改之后,我们要将修改的文件拖入暂存区中,类似于一步确认操作,如果我们不想暂存,可以再将文件从暂存区拖入未暂存区中。
    了解完这些区域的功能,我们就要进行提交推送了。点击暂存所有按钮,将所有未暂存文件进行暂存,然后在区域4中填写本次提交的信息,点击右下角的提交按钮,之后主界面会变成如图所示,说明我们此次的修改已经提交到本地的版本库中,有一个提交等待推送。然后点击推送按钮,即可将本次提交推送至仓库中。


6.获取、拉取
    如果我们在公司做了项目,推送到仓库中,回到家还想继续做怎么办。此时就需要用到获取、拉取功能。获取是显示仓库的项目对比本地项目有何新提交,而拉取操作则是将这些提交的内容拉取到本地。这里我们将仓库的README.md文件在网页上进行修改提交,来模拟该操作。
    更改完README.md文件之后,我们在SourceTree中点击获取,会显示出仓库中对比本地的文件的更改,同时拉取按钮与master分支会显示有一个待拉取。点击拉取按钮即可将该文件更新到本地。

7.冲突、解决冲突
    在多人协作开发项目的过程中,很有可能两个人同时对一个文件进行操作,当其中一人将更改推送到仓库后,另一人在拉取的过程中极有可能发生冲突,所以,一般情况下,在项目开发的过程中尽量比较多人同时对一个文件进行操作,尤其是Unity中的场景,两个人辛辛苦苦分别对场景进行了修改,结果提交的时候发现有冲突,这个时候谁放弃自己的修改都很难受。这里我们对仓库的README.md和本地的README.md进行修改,然后拉取仓库的更改,来模拟冲突。
    我们分别对仓库和本地的README文件进行如下更改,并提交,网页端的提交是直接推送到仓库的。
    点击获取,界面会变成如下所示(马赛克部分是我测试冲突用的,目前没有多人协同工作,为了确保演示是正确的,我预先模拟了几遍,请忽略掉,嘿嘿)此时显示的是一个本地的待提交,和一个仓库的待拉取。

    点击拉取按钮,这时候会弹出如下提示框。(这里我们不先推送,而是先拉取,是为了确保仓库的版本不会出错,要将冲突放在本地解决,以免出现未知的问题)

    点击关闭,会显示出来冲突的文件,如下所示

    如果想简单粗暴一些,那么右键点击冲突文件,然后选择“使用他人版本解决冲突”或者“使用我的版本解决冲突”,如字面意思所示,如果选择其中一个,那么另一个人的修改将被丢弃,在进行此操作时需要与他人协商好。解决冲突之后,我们需要将解决冲突后的文件重新提交,然后再进行推送。
    另一种方法是使用外部比较工具进行冲突解决,常用的工具有Beyond Compare,下载该软件后,在工具->选项->比较选项卡中进行设置,如图。

    设置完毕之后,我们右键冲突文件,在解决冲突中选择打开外部合并工具。

    如图,区域1是本次提交的文件的修改,区域2是本地已经提交过的文件的修改,区域3是仓库的文件,区域4是合并后的文件,如图,我们将第一行与第三行选择了仓库的修改,第二行选择了本地的修改,选择完毕以后,点击保存。再回到SourceTree,会发现未暂存的冲突文件已经没有了,多了一个.orig文件,之后我们将该文件移除即可进行提交推送。

8.分支
    在多人协作开发中,一般是将仓库的文件拉去下来,然后新建分支进行开发,待开发无误之后,再提交Merge Request,由项目的管理者进行分支的合并,以确保项目的安全性。这里因为没有多个成员,所以将不再进行演示。
四、最后
    在使用Source Tree的过程中,可能会有各种各样的错误提示,这种情况不要慌张,先看清楚提示框提示的错误信息,然后再根据错误的信息去解决问题,一般情况下,大多数的错误都是操作不当造成,根据错误信息都可以很快速的解决。
五、微元素更新-Git LFS
    对于工程中的视频、高面数模型、音频、高分辨率图片等资源,往往占用极大部分的空间,造成仓库空间的浪费,为此,Git推出Git LFS(Large File Storage)即大文件存储,以单独存储类似以上的大文件。
1.要求
    Git版本:1.8.5及以上
    仓库选择:目前已知的,Github、Bitbucket和我目前使用的Coding.net都支持Git LFS,至于其他的仓库需要查看官方的文档是否支持。
2.SourceTree中初始化LFS仓库
    在菜单栏-仓库中选择 Git LFS-初始化仓库,如下图,确认使用Git LFS。
   
    确认之后会让你添加要被LFS追踪的文件,这里可以手动输入,也可以在下拉菜单中选择,如果文件格式不正确会自动提示,改为正确的文件格式。
    添加完成之后,界面如下,同时,在项目的目录下也会多出来一个.gitattributes文件,记录了需要被LFS追踪的文件类型之后工程中的mp3格式文件,就会被自动追踪,存放在Git LFS仓库中,不会占用项目仓库的空间。
    我之前使用Bitbucket的时候,曾经使用过Git LFS,如下图,项目仓库占据了400M大小,而Git LFS使用了700+M大小,这样极大的减少了项目仓库的大小,十分方便。
   以上便是我在工作中使用Git+SourceTree的一些经验,如有疑问,请在评论区留言,如有不足,欢迎指正
2018-9-19 10:23:58  
 赞 赞 0

使用道具 登录

4个回答,把该问题分享到群,邀请大神一起回答。
2#
资源甚好,发帖艰辛,且阅且珍惜
回复 收起回复
2018-9-19 11:50:52   回复
 赞 赞 0

使用道具 登录

3#
感谢楼主分享!
PS:Git在我看来最大的作用不是版本控制,而是监测工作进度——什么时候、完成的什么内容都一目了然。
回复 收起回复
2018-10-16 10:44:27   回复
 赞 赞 0

使用道具 登录

4#
咸菜馒头粥 发表于 2018-10-16 10:44
感谢楼主分享!
PS:Git在我看来最大的作用不是版本控制,而是监测工作进度——什么时候、完成的什么内容 ...

监测工作进度我之前用过Jira和禅道,都不错。不过用Git也是个好主意,但像我这种在提交的时候不写提交信息的,估计要被打死,哈哈哈哈
回复 收起回复
2018-11-5 10:30:00   回复
 赞 赞 0

使用道具 登录

5#
赞一个~666
回复 收起回复
2018-11-5 10:32:26   回复
 赞 赞 0

使用道具 登录

CG 游戏行业专业问题

Unity3D技术手机游戏引擎手游引擎
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表