admin管理员组

文章数量:1638601

文章目录

        • 20.1 版本控制管理工具:Subversion(SVN)
        • 20.2 SVN服务器搭建
          • 20.2.1 VisualSVN Server安装包下载
          • 20.2.2 VisualSVN Server安装
          • 20.2.3 新建版本库Repository
          • 20.2.4 创建SVN账号
          • 20.2.5 创建账号组Group
        • 20.3 TortoiseSVN客户端
          • 20.3.1 TortoiseSVN下载
          • 20.3.2 TortoiseSVN安装
          • 20.3.3 导入项目到SVN版本库中:Import
          • 20.3.4 从SVN检出项目本地:Checkout
            • 20.3.4.1 本地已有工程文件
            • 20.3.4.2 本地没有工程文件
          • 20.3.5 提交修改到SVN:Commit
          • 20.3.6 从SVN更新到本地:Update
          • 20.3.7 查看SVN日志:Show log
          • 20.3.8 SVN还原提交:Revert changes from this revision
          • 20.3.9 SVN还原本地修改:Revert
          • 20.3.10 SVN文件冲突解决
          • 20.3.11 SVN拉项目分支
          • 20.3.12 SVN合并
          • 20.3.13 SVN权限管理

简介:我是一名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/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/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权限,最后点击确定即可。

本文标签: 手把手教会版本工具第二十集