距离第一次使用HG已经由2,3年了。 从第一次将HG用于自己的项目, 用U盘同步代码. 到现在将HG应用于linux, 版本差异发布, 项目内部多人的分布式开发,已经感觉非常熟练。
我们的项目的客户端和服务器均由C++开发,由于HG设计的理念是1个工程对应1个库, 因此我们的客户端和服务器是分开的两个HG代码库。这种思想和SVN管理的代码有很大不同。SVN时代的游戏工程大多是这样安排目录的:
common <-客户端和服务器共享的库
client<-客户端的代码
server<-服务器的代码
通过SVN强大的权限控制给不同的前后端赋予权限,前后端程序将获得不同的目录组合。SVN下的这种工程组织方法能很好的解决单一语言跨工程的代码,协议共享问题。虽然现在各种Erlang,Java的服务器语言与as3,lua的不同客户端脚本语言混杂的时代已经无所谓这种老式设计思想。但是对于我们纯C++的手游来说,还是必须面对分布式代码管理工具下的代码跨库共享问题。
我就这个问题与多年前被我推荐过HG的朋友讨论起来,他们也存在我们这个问题,但是他们的解决方法就是每个工程一个库。然后被我问到:“同步一次代码,一次次的打开不同的库(他们客户端+服务器一共6到7个HG代码库),进行同步, 完成后, 还要反向pull,不累啊?”, 朋友回答:“习惯就好”
随后,我也翻查了git对多项目的支持。得到的答案也是跟HG一样的, 这类分布式代码管理工具本身的设计理念只有账号,而无权限, 本身就是基于开源代码精神设计的工具, 如果分了权限,岂不是违背开源精神(这是我想的)。因此如果想管理多个项目代码, 要么多库,要么合库。