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

最近不少朋友提出为何不把KlayGE推到github的问题,原因是目前github只支持git,而我暂时不打算从hg切换到git。我原先觉得,既然有hg-git这样的插件,这件事情技术上应该很容易,直接转就可以了。试验了一下,发现其实还存在一些坑,必须要对付。这里拿空明大牛salvia的repository为例子,试验从hg转到git。

第一次尝试,直接转换

安装了hg-git之后,建立一个叫做salvia-git的目录,在里面初始化一个git repository。然后在到salvia-hg的目录,直接执行hg push ../salvia-git。结果在执行了很久之后,出现

pushing to ../salvia-git
abort: The system cannot find the file specified

以失败告终。

第二次尝试,bare

在初始化git repository的时候,里面有个选项,Make it Bare (No working directories)。刚才是关闭的,打开会如何呢?这次尝试就把它开起来了。结果还是出现一样的错误。

第三次尝试,git bash

搜索“abort: The system cannot find the file specified”,到了这么个网页。里面说应该在Git Bash shell,而不是命令行执行push。于是我重新初始化了salvia-git(没有bare),在bash里面push。满怀期待地等待了好一阵子,依然失败。错误提示是

pushing to ../salvia-git/
searching for changes
adding objects
abort: git remote error: refs/heads/master failed to update

第四次尝试,git bash + bare

跟第二次尝试一样,打开Make it Bare的选项。这次成功了!

pushing to ../salvia-git
searching for changes
adding objectsadded 1291 commits with 13075 trees and 26863 blobs

那个本地的git repository也可以正常查看和使用。所以,结论是,必须要开启bare,并且要在git bash下执行push。我觉得应该是hg-git里有bug,混淆了/和\这两个符号,使得只有在bash下才能得到正确路径。

总结

现在这条路已经趟通了,以后要转KlayGE也可以这么做。但现在还没有具体的转换计划,短期内仍会用hg作为版本控制工具。原本以为git的repository会比hg的小很多,结果发现salvia的hg反而比git小了3.6%,KlayGE的话是hg比git大了5.0%。不过由于git是用一个大文件的方式存储,在磁盘占用上,总是能小15%左右。