漫谈VCS在游戏中的使用

VCS(版本控制系统)

基本上大家耳熟能详的就是git和svn这两个。前者是基于分支做管理的,后者是用目录来进行版本管理。从使用上来说,代码更友好的是Git,但是对于游戏项目来说很多都是用SVN,更好管理文件资源。

最近还用到一个叫Perforce(P4V)的商业VCS软件,也很不错。网上各种VCS资料已经很多了,这里着重讲讲不同的VCS使用上的体验和个人主观臆断的想法。

切版本的资源开销

Git

每次的开销上,对于一些非文本的文件,例如图像资源、二进制等Git在做分支管理的时候就是会比SVN更慢一些。因为我理解的Git 在每次切换分支的时候,是经过了本地的Git Tree来比对不同分支下的差异,然后根据这些差异来重放的,也就是说Git只存每次提交Diff的内容。但是对于二进制或者是非简单文本内容来说(例如xlsx),Git就没办法分析出Diff内容了,也就是退化到存文件本身。

SVN

这个是用目录来管理的,就好像不同目录下有不同版本的资源。Git是用分支来隔离,SVN就是用目录了。只要把所有目录都拉下来其实就不存在切换版本的开销了,毕竟换个目录就可以。但是如果要新建一个版本(在Git叫分支),就需要耗费比较多的时间,可以想象成拷贝出一个新的目录。

P4V

用Workspace来做隔离,在Config文件里也叫Client。这些workspace都是放在中心话的P4V Server上的,我并没有深究存放的形式是什么样的,但是切版本的话资源开销上也就h是网络开销。需要到P4V Server上去拉取信息。和上述两种都有存放在本地的一些版本信息不同,P4V是全部版本信息都放在服务器上的。

使用体验

如果单论代码管理来说,Git是最好用的,无论是流畅的分支管理,还是各类生态插件的成熟程度。但是一个产品的组成并不是只有代码,也包含了很多非代码资源。在游戏,就包含了:unity资源、配置表格、各类工具等等。

单论配置表格,一个xlsx文件如何用Git来进行管理呢?Git并不支持对这一类特殊编码文件的diff分析。如果全部包含的来看,最近体验P4V > Git + SVN。

P4V这里简单讲一下,其实一饿很简单,就是将所有的版本控制的信息都放在P4V的Server上,本地只需要一个拉取配置和客户端就可以拉取信息和读取一些版本信息。

极具中心化的版本管理的一个问题就是,单点部署的服务端出问题了你的所有版本信息都没办法用了。这是什么意思呢?可以理解的是你失去了.git 文件夹这样。

可能会遇到的问题

权限管理混乱、服务器资源有限(有待补充)

如果单点万无一失呢?

那么好处就很多了,相比于Git和SVN。

首先,因为是用workspace进行不同用户隔离的,每个用户又可以用Stream的形式从远端拉取指定的分支(原谅我这么叫它,我也不知道官方怎么说),所以这个workspace相当于每个用户独有的.git文件夹(或者.svn),然后Stream 就是remote分支。

其次,因为数据都是存在服务器上的,所以其他用户想看到你暂存的内容是可以的!这一点我很喜欢。Git有个暂存区的概念,git add 会把文件加入到本地的暂存区里,但是其他用户是看不到的,想看到你的修改需要提交到远端才可以。但是因为版本信息都是放在服务器上的,在P4V上暂存区叫做changelist,git add 操作又称作shelve。这个changelist是可以跨workspace的,也就是可以通过分享自己的changelist id 给其他人,在不提交代码的情况下让其他人看到你的修改内容!

最后,因为是商用软件,所以在一些开源组件上的支持还挺成熟的。