《学Unity的猫》——第二十集:手把手教会版本控制工具Subversion(SVN)的使用

8 篇文章 0 订阅

简介:我是一名Unity游戏开发工程师,皮皮是我养的猫,会讲人话,它接到了喵星的特殊任务:学习编程,学习Unity游戏开发。
于是,发生了一系列有趣的故事。
在这里插入图片描述

20.1 版本控制管理工具:Subversion(SVN)

运维帮皮皮安装好了内网机和外网机。
在这里插入图片描述
我:“左边这台是内网机,不能上网,主要用于项目工程开发;右边这台是外网机,可以上网,主要用于资料查找、通讯交流。”
皮皮:“为什么要弄两台电脑呢?”
我:“因为项目工程是公司机密,工程不能放在外网环境的电脑中;我们在内网机中开发,然后发布版本到外网,交付到外网线上环境,用户就可以下载和运行我们发布的版本了。”
皮皮指着内网机说:“我这内网机磁盘空空的,项目工程在哪里呀?”
我:“项目工程放在SVN服务器上,你要通过SVN检出工程先。”
在这里插入图片描述

皮皮:“什么是SVN?”
SVN全称Subversion,它是一个开源的版本控制系統,它管理着随时间改变的数据。这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样我们就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。
我:“对于多人协作的项目工程,版本控制是必要的。比如你从SVN服务器检出工程到本地,在本地进行开发,然后再提交到SVN服务器,别人就可以从SVN服务器更新到你提交的内容了。”
在这里插入图片描述
皮皮:“SVN服务器怎么搭建的?我现在如何检出工程呀?”
我:“下面就来教你。”

20.2 SVN服务器搭建
20.2.1 VisualSVN Server安装包下载

进入Apache Subversion官网: http://subversion.apache.org/packages.html
在这里插入图片描述
页面拖到最下面,可以看到Windows版本的安装包,点击VisualSVN
在这里插入图片描述
此时会进入VisualSVN下载页,点击VisualSVN ServerDownload 64-bit按钮。
在这里插入图片描述
下载完成。
在这里插入图片描述

20.2.2 VisualSVN Server安装

运行VisualSVN Server安装包,点击Next
在这里插入图片描述
勾选I accept the terms in the License Agreement,点击Next
在这里插入图片描述
默认,点击Next
在这里插入图片描述
LocationVisualSVN Server的安装目录;
Repositorys:版本库目录;
Server Port:端口,(这个端口要记住,后面要用到);
Use secure connection:勾山表示使用安全连接https;
Backups:备份目录。

点击Next
在这里插入图片描述
点击Next
在这里插入图片描述
点击Install
在这里插入图片描述
安装成功,点击Finish
在这里插入图片描述
运行VisualSVN Server.msc
在这里插入图片描述
界面如下。
在这里插入图片描述

20.2.3 新建版本库Repository

VisualSVN Server中右键Respositories,点击Create New Repository...
在这里插入图片描述
点击下一步
在这里插入图片描述
输入版本库名字,比如MyRepository,点击下一步
在这里插入图片描述
选择Single-project repository(with the top-level 'trunk', 'branches' and 'folders'),点击下一步
在这里插入图片描述
点击Create
在这里插入图片描述
此时可以看到版本库的URL链接,点击Finish
在这里插入图片描述
创建成功,可以看到自动创建了branches、tags、trunk三个文件夹。
trunk为主开发目录,branches为分支开发目录,tagstag存档目录(不允许修改)。
在这里插入图片描述

20.2.4 创建SVN账号

VisualSVN Server中右键Users,点击Create User...
在这里插入图片描述
输入账密,比如linxinfa,点击OK
在这里插入图片描述
账号创建成功。
在这里插入图片描述
再创建一个账号pipi
在这里插入图片描述

20.2.5 创建账号组Group

当创建了很多SVN账号之后,为了方便管理,我们会选择将账号进行分组。
右键Groups,点击Create Group...
在这里插入图片描述
输入组名,比如u3d_client
在这里插入图片描述
点击Add...添加成员。
在这里插入图片描述
添加成功,点击OK
在这里插入图片描述
这样,分组就创建成功了。
在这里插入图片描述

20.3 TortoiseSVN客户端

SVN服务器搭建好了,接下来就是使用SVN客户端了。

20.3.1 TortoiseSVN下载

需要下载TortoiseSVN客户端,下载地址:https://tortoisesvn.net/downloads.html
根据你的电脑选择对应的版本,比如我选择TortoiseSVN 1.14.0 - 64-bit
在这里插入图片描述
下载完成。
在这里插入图片描述

20.3.2 TortoiseSVN安装

运行TortoiseSVN安装包,点击Next
在这里插入图片描述
点击Next
在这里插入图片描述
command line client tools选择Will be installed on local hard device,这样方便后面使用命令行执行SVN命令,点击Next
在这里插入图片描述
点击Install
在这里插入图片描述
安装完毕,点击Finish
在这里插入图片描述
可以在任意文件夹空白处右键,看到菜单中出现了SVN相关的菜单。
在这里插入图片描述

20.3.3 导入项目到SVN版本库中:Import

比如我想将我本地的这个UnityResumeDemo导入到SVN版本库中。右键文件夹UnityResumeDemo,点击菜单TortoiseSVN -> Import...
在这里插入图片描述
此时需要输入版本库URL
在这里插入图片描述
比如我们想把本地项目导入到trunk文件夹中,可在trunk文件夹鼠标右键,点击Copy URL to Clipboard
得到URL地址:https://linxinfapc:8443/svn/MyRepository/trunk
在这里插入图片描述
我们可以在trunk中加子目录,比如https://127.0.0.1:8443/svn/MyRepository/trunk/UnityResumeDemo
填入URL,点击OK
在这里插入图片描述

首次操作的话,会弹出账号登录窗口,输入账号密码,点击OK
在这里插入图片描述
本地项目就会导入到SVN版本库中了。
在这里插入图片描述
完成后,可以在trunk文件夹中看到我们导入的UnityResumeDemo项目。
在这里插入图片描述

20.3.4 从SVN检出项目本地:Checkout
20.3.4.1 本地已有工程文件

由于UnityResumeDemo工程是从我们本地导入到SVN的,所以我们本地已经有UnityResumeDemo工程,但是此时我们本地的UnityResumeDemo工程是没有得到SVN版本控制的,需要执行SVN Checkout
鼠标右键UnityResumeDemo,点击菜单SVN Checkout...
在这里插入图片描述
URL of repositorySVN版本的地址,Checkout directory是我们本地目录,点击OK
在这里插入图片描述
由于我们本地的UnityResumeDemo文件夹是非空的,所以会弹出提示框,点击Checkout即可。
在这里插入图片描述
开始检出,可以看到我们的本地文件被执行了Versioned操作。
在这里插入图片描述
可以看到我们本地项目文件都出现了一个绿色的勾图标。
在这里插入图片描述

20.3.4.2 本地没有工程文件

假设是另外一个人想要从SVN检出项目,那他本地是没有工程文件的。在本地文件夹中空白处鼠标右键,点击SVN Checkout...
在这里插入图片描述
选择对应的URL,填写Checkout directory,如:E:\unity_projects\UnityResumeDemo,点击OK
在这里插入图片描述
我们可以看到列表中执行了很多的Added操作。
在这里插入图片描述
完成后,我们本地就可以看到对应的项目工程了。
在这里插入图片描述

20.3.5 提交修改到SVN:Commit

我们修改工程中的脚本,比如修改Main.cs,添加一行日志输出。
在这里插入图片描述
此时我们可以看到本地的Main.cs出现了红色的感叹号,表示它发生了修改。
在这里插入图片描述
在空白处鼠标右键,点击SVN Commit...
在这里插入图片描述
填写提交日志,要言简意赅,不要随便填写个abcd这样的日志,点击OK
在这里插入图片描述
提交成功,可以看到我们的对SVN服务器上的Main.cs进行了Modified(修改)操作。
在这里插入图片描述

20.3.6 从SVN更新到本地:Update

其他人可以执行SVN Update,将你提交的修改更新到他们的本地。在文件夹空白处鼠标右键,点击SVN Update
在这里插入图片描述

20.3.7 查看SVN日志:Show log

在文件夹空白处鼠标右键,点击菜单TortoiseSVN -> Show log
在这里插入图片描述
即可看到我们的修改记录。
在这里插入图片描述
我们可以双击对应的文件,查看修改前后的文件差异。
在这里插入图片描述
左边是修改前,右边是修改后,可以看到我们新加的那行Debug.Log代码。
在这里插入图片描述

20.3.8 SVN还原提交:Revert changes from this revision

有时候我们想要还原某一次SVN的提交。可以在SVN日志窗口中鼠标右键某一条提交记录,点击Revert changes from this revision
在这里插入图片描述
点击Revert
在这里插入图片描述
还原成功。
在这里插入图片描述
注意,此时还原的是我们本地的文件,可以看到本地Main.cs中的Debug.Log代码没有了。
在这里插入图片描述
我们需要将本地还原的文件提交到SVN
在这里插入图片描述
填写提交日志,点击OK
在这里插入图片描述
提交成功。
上面我们是还原某一次提交,有时候我们要还原到历史的某个版本,则可以选中某个记录,点击Revert to this revision
在这里插入图片描述

20.3.9 SVN还原本地修改:Revert

有时候我们在本地修改了一些文件,最后又想还原这些修改。
比如在Main.cs中写一个Test函数。
在这里插入图片描述
我们想要还原它,在文件夹空白处鼠标右键,点击菜单TortoiseSVN -> Revert...
在这里插入图片描述
勾选要还原的文件,点击OK
在这里插入图片描述
还原成功。
在这里插入图片描述
可以看到Test函数没有了。
在这里插入图片描述

20.3.10 SVN文件冲突解决

如果两个人修了同一个脚本的同一行代码,提交的时候就会冲突。
比如我写了一行Debug.Log("AAA");,我提交到SVN
在这里插入图片描述
另一个人在同一个地方写了一行Debug.Log("BBB");
在这里插入图片描述
他提交Main.cs的时候就会提示Main.cs已经out of date,即过时了,需要先执行SVN Update
在这里插入图片描述
点击OK,点击Update
在这里插入图片描述
此时就会出现Main.cs冲突(Conflicted)的提示了。
在这里插入图片描述
鼠标右键冲突的文件,点击Edit conflicts即可编辑冲突。
在这里插入图片描述
冲突的行会以红色显示,如下。
左边是Remote file,即远程文件,右边是Working Copy,即本地文件。
在这里插入图片描述
加入我们想以远程文件为准,则选择左边的那行代码,鼠标右键,选择Use this text block
在这里插入图片描述
如果有多个冲突,都想以远程文件为准,则选择Use this whole file
如果两边都要保留,则可以选择Use text block from 'A' before 'B',谁先谁后具体根据情况定,比如我选择Use text block from 'mine' before 'theirs',合并后的效果可以在下方窗口看到。
在这里插入图片描述
最后勾选Mark as resolved,即可解决冲突。
在这里插入图片描述
接着就可以正常提交了。

20.3.11 SVN拉项目分支

实际项目中,会有一定周期的版本迭代,每一个大版本一般就会拉一个新的版本分支出来。
拉新分支的操作其实就是在SVN中复制一个副本,操作如下。
在本地项目文件夹空白处鼠标右键,点击菜单TortoiseSVN -> Repo-browser
在这里插入图片描述
此时会打开版本库浏览器,如下。
在这里插入图片描述
我们想给UnityResumeDemo拉一个新分支,鼠标右键它,点击Copy to...
在这里插入图片描述
假设要拉的新分支叫UnityResumeDemo_v2,如下,URL为:https://127.0.0.1:8443/svn/MyRepository/trunk/UnityResumeDemo_v2
点击OK
在这里插入图片描述
填写拉新分支日志。
在这里插入图片描述
点击OK,稍等几秒,执行一下目录刷新(Refresh)。
在这里插入图片描述
即可看到新拉的分支了。
在这里插入图片描述

20.3.12 SVN合并

当多条分支并行开发的时候,最终需要将内容合并到一条分支中,此时就需要进行SVN合并操作。
如下,我本地检出了两个分支。
在这里插入图片描述
我在第一个分支中修改Main.cs,加了一个Hello函数。
在这里插入图片描述
提交到SVN
在这里插入图片描述
我想把这个Hello函数合并到v2分支中。
进入本地UnityResumeDemo_v2文件夹中,在空白处鼠标右键,点击菜单TortoiseSVN -> Merge...
在这里插入图片描述
选择Merge a range of revisions,点击Next
在这里插入图片描述
选择目标源URLhttps://linxinfapc:8443/svn/MyRepository/trunk/UnityResumeDemo/Assets/Scripts
在这里插入图片描述
点击Show log
在这里插入图片描述
选择我们要合并的记录,点击OK
在这里插入图片描述
此时会出现一个记录版本号,表示只合并该条记录。
在这里插入图片描述
如果我们想合并所有的记录,则勾选all revisions,点击Next
在这里插入图片描述
最后合并之前,可以先点击Teset merge进行合并测试。
在这里插入图片描述
如下是Teset merge的结果,没有异常。
在这里插入图片描述
点击Merge,执行合并。
在这里插入图片描述
合并后,我们发现v2版本的Main.cs发生了变化。
在这里插入图片描述
打开Main.cs,可以看到Hello函数已经合并过来了。
在这里插入图片描述
最后提交v2版本的的代码到SVN即可。

20.3.13 SVN权限管理

当有多个分支版本的时候,我们需要对SVN权限进行管理,比如已经发布版本的分支,我们要禁止Write权限,只提供Read权限。
打开VisualSVN Server,鼠标右键对应的分支目录,点击Properties...
在这里插入图片描述
可以看到,默认是Everyone都有Read / Write权限。
在这里插入图片描述
我们可以将其改为Read Only,点击确定
在这里插入图片描述
此时再尝试提交文件,就会提示禁止了(forbidden)。
在这里插入图片描述
我们也可以单独添加某个人或组的权限,点击Add...按钮。
在这里插入图片描述
选择要添加的人或组,点击OK
在这里插入图片描述
添加成功,linxinfa具有Read / Write权限,其他人只有Read Only权限,最后点击确定即可。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林新发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值