分布式版本控制系统——Mercurial
最近惊喜的发现,Google Code的项目设置的“Version control system:”中多了一个名叫的“Mercurial”的选项,而不再仅仅是唯一的的一个选项:Subversion。心血来潮,于是决定试用一下。
Mercurial和Subversion简直是不能相提并论的,因为Mercurial是“分布式版本控制工具(DVCS)”,而Subversion是“集中式版本控制工具”。什么意思呢?用过Subversion的都知道,使用Subversion必须有一个中央服务器来存储代码,每个开发人员都要有一个客户端,从服务器上取得代码拷贝,本地修改后再提交到中央服务器。而Mercurial则不需要这么一个中央服务器的存在(也可以有),也就是说,每个开发者都在本地代码仓库中存取、修改,没有任何一个代码仓库更有权威性。这有什么好处?我觉得最大的一点是,使用分布式版本控制工具可以自由地修改代码,而不必担心会影响到别人,因为无论怎么改代码都是存储在本地的。同样原因的另一各好处就是可以自由地在不联网时控制版本库,而开发者之间的写作只需要在联网时进行即可。当然我只能简单说说了,更多的不同推荐阅读一下这篇为什么我们要放弃Subversion。当然Mercurial并不是唯一的一种分布式版本控制工具,还有强大的git。ibus和ibus-pinyin的开发,就是用的git作为版本控制工具。有过git使用经验的我感觉的Mercurial并不是很难,如果没有经验的话就不好说了,因为有很多概念和传统的SVN不同,需要一段时间适应。推荐一篇入门文章:分布式的,新一代版本控制系统Mercurial的介绍及简要入门。Mercurial命令行工具名字是hg,都是“汞”的意思。
很高兴能够看到Google Code开始支持分布式版本控制工具了,但至于Google为什么选择了Mercurial而不是Git,有一篇文章介绍Git 與 Mercurial 的分析。说了这么多,到底怎么在Google Code上用Mercurial呢?我的项目已经有SVN作为管理工具了,首先要解决的问题是把SVN上面原有的代码移植到Mercurial上,当然简单的方法是把最新的版本直接提交到Mercurial版本库,但我想要留下SVN上所有的版本提交记录,这里有一篇文章讲得很好 在Google Code上用 Mercurial 取代 Subversion 管理你的项目" 。
作为分布式版本控制工具,自然会有很多分支,而分支之间错综复杂的关系如果没有一个图形化的工具是很难阅览的。著名的git开源托管网站github.com提供了在线的分支网络阅览功能,因此可以一目了然(如下图),但Google Code就没有这么好的功能了,因此还依赖一个本地的图形化工具。
找来找去,找到了小乌龟TortoiseHg。TortoiseHg本身是一个面向Windows平台的工具,和TortoiseSVN,TortoiseGit一样。高兴地发现它是GTK+写的,因此也提供了Linux版本。我在Ubuntu下使用apt-get install tortoisehg就安装了,按照网上提供的方法,再安装一个python-nautilus,然后将集成tortoisehg到nautilus
mkdir -p ~/.nautilus/tortoisehg/src/
cd ~/.nautilus/tortoisehg/src/
hg clone https://bitbucket.org/tortoisehg/stable tortoisehg
mkdir -p ~/.nautilus/python-extensions/
ln -s ~/.nautilus/tortoisehg/src/tortoisehg/contrib/nautilus-thg.py ~/.nautilus/python-extensions/
之后重新登录,或者使用nautilus -q重启nautilus引擎即可。但是我按照此方法安装后却发现不能正常使用,而且没有任何错误提示。于是又Google半天,终于找到了解决方法。在终端中使用tail -f ~/.xsession-errors,再次在文件浏览器中点击菜单中TortoiseHg的功能,这时终端中显示出了如下信息: abort: This version of TortoiseHg requires Mercurial version 1.5.n to 1.6.n, but finds 1.4.3
原来是Ubuntu官方源中Mercurial版本太低了,因此我使用了ppa的源:
sudo add-apt-repository ppa:tortoisehg-ppa/releases
sudo add-apt-repository ppa:mercurial-ppa/releases
sudo apt-get update
sudo apt-get install mercurial python-nautilus tortoisehg