转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=3258

前不久提过关于迁移到git的想法,是时候做一个详细的计划了。为此,我专门在github上启动了一个KlayGE2Git的项目,用于存放迁移过程中需要的脚本。希望对其他也有类似计划的朋友能有所帮助。

需要完成的事情

最终选择的迁移方案是方案4:单一repository,下载外部库发行版。所以在迁移的过程中,需要考虑如何减少repository大小,以及考虑迁移之后工作流需要的改变。

删除当前工作目录的大文件

第一步应该是删除当前工作目录的大文件,主要是二进制资源文件。并且需要在cmake里面加上自动下载的脚本,以便在配置工程的时候可以从klayge.org上获取需要的文件。否则后面开发的时候会有问题。这一步已经完成,目前的hg上已经没有资源文件。脚本名为ResourceFiles.py。通过在Python中调用MercurialApi实现。

删除外部库

External目录下包含的都是来自第三方的代码,这些比KlayGE本身大了好几十倍。把它们从repository中删除,只需要保留自动下载发行包并打上补丁的功能就可以了。这一步目前已经基本完成。

经过这些清理,工作目录已经小于10M。

删除历史记录中的大文件

显而易见的是,hg的repository不是删除了当前版本就行的,还需要遍历整个历史记录,找到曾经有的大文件,把文件名记录下来。这由GenSlimFileMap.py完成。它会输出一个大文件名的列表。也是通过在Python中调用MercurialApi实现。这一步已经完成实验,但不会出现在公开的hg中。

hg convert

hg有个叫做convert的扩展,可以把各种版本控制方式转到hg,当然也包括hg转hg。在转的过程中,可以指定忽略掉那些文件。于是就用上了上一步输出的文件。同时,以前我们在check in代码的时候,用的用户名不统一,现在也都改成全名<邮件>的形式。这同样也能在这一步完成。脚本在Slim.bat中,也不会出现在公开的hg中。

经过这个convert,repository就剩下26M,远小于之前的500M。

转到git

最后就是用从hg导入git的方法和坑里总结的方法,把精简过的hg库转成git。这一步将会在短期内进行。

总结

目前这个流程正在开发和测试中。在4.7发布前有望推出基于git的repository。在此特别感谢dsotsen的建议,让我重新思考迁移到git的可能性。并且需要感谢钱康来对脚本的测试和改进。