在Google Code上用 Mercurial 取代 Subversion 管理你的项目

在Google Code上用 Mercurial 取代 Subversion 管理你的项目
之前,我一直都是用的SVN作为我日常的版本控制工具,诸如代码啊文档啊之类的东西。至于CVS这么复古的版本控制工具更是没有机会去尝试。说到SVN控制版本的话,作为托管服务商比较好的就有google code,本人也一直在使用。最近,由于一些项目的原因,了解到了另外一个版本控制工具Hg,当然Hg不是它的原名,原名叫Mercurial,都是水银的意思,所以通常称呼为Hg。

与集中式版本控制工具SVN不同的是,Hg是一种分布式版本控制工具。除了Hg,还有大名鼎鼎的Git也是分布式版本控制工具。想要更具体的了解版本控制工具的,推荐阅读胡凯《为什么我们要放弃Subversion》,
风云《分 布式的版本控制工具》,猛禽《分 布式版本控制(一)》 《分 布式版本控制(二) 》,Sparkle《我 与Mercurial 系列等几篇文章》等。只是想了解Mercurial(Hg)的话,Mercurial官方wiki已经有很详尽的资料和帮助文档了。

接下来回到本文的正题。本文的起因是Google Code在早前除了支持SVN托管代码外,更支持了分布式版本控制Mercurial(Hg)来管理你托管在Google Code上的项目。至于Google为什么在这么多种的分布式版本控制工具中选择了Mercurial而不是Git,这里有一篇文章,推荐阅读一下《Git 与 Mercurial 的分析》,原文《Analysis of Git and Mercurial》

下面,就教大家怎么让Google Code用Mercurial替代Subversion来管理你的项目。原文 http://code.google.com/p/support/wiki/ConvertingSvnToHg。

在Google Code里设置由Mercurial来管理项目

  1. 访问你已经存在的google code项目页面,选择 “Administer” 选项页,然后选择下级分类选项页 “Source”。
  2. 改变第一项Repository type为Mercurial。
  3. 参照下文介绍的“如何转换Google Code里Subversion的历史记录到Mercurial中”,导入你的代码到 Hg 代码库中
  4. 以同样的导入代码的方式,导入你的wiki到Hg wiki库中。确认你使用的subversion代码库的wiki路径(例如 http://projectname.googlecode.com/svn/wiki) 以及 Hg 代码库的wiki路径(http://wiki.projectname.googlecode.com/hg/)

在你切换你的项目使用Mercurial管理后,你的旧Subversion项目仍然可以访问,所以在你切换之前你不需要备份你的代码库。你的Subversion版本库将会保持访问: https://projectname.googlecode.com/svn/

如何转换Google Code里Subversion的历史记录到Mercurial中

第一种方式:简要截取
如果你不在乎你原来项目的历史记录,那么你可以简单地从Subversion里的主干代码或者wiki中提取最新的代码然后放到你的Mercurial中。假设你googlecode里的 Mercurial代码库是空的,那么可以这样操作:

 $ hg clone https://projectname.googlecode.com/hg hg-client
 $ cd hg-client
 $ svn export --force http://projectname.googlecode.com/svn/trunk .
 $ hg add .
 $ hg commit -m "Initial import of source."
 $ hg push

接着转换你的wiki:

 $ hg clone https://wiki.projectname.googlecode.com/hg hg-client-wiki
 $ cd hg-client-wiki
 $ svn export --force http://projectname.googlecode.com/svn/wiki .
 $ hg add .
 $ hg commit -m "Initial import of wiki."
 $ hg push

第二种方式:完整历史记录转换
如果你要迁移你整个的历史记录,整个过程可能要你更多的参与了。你将会需要先安装一些特殊的工具程序。
安装工具

  • ‘hg convert’扩展模块。最新版本的Mercurial已经包含这个模块,请确保你的hg版本为1.1 或者 1.2 或者更高版本。 (可用”hg –version”命令查看) 然后在你的.hgrc里面添加如下代码启用该扩展模块:
    [extensions]
    hgext.convert=
  • Subversion的swig-python绑定。请确保您有最近的Subversion安装(1.5或1.6)。绝大部分的Subversion衍生版本都有与python的绑定,或者提供他们额外的二进制包。你可以运行如下代码检查你的svn – python的绑定是否正常:
    $ python -c "import svn.core; print svn.core.SVN_VER_MINOR"
            5

    如果失败,或返回的版本低于5,则肯定是不对的。如果你没有二进制软件包,你可以从Subversion自己的源代码树中建立:

    $ svn checkout http://svn.collab.net/repos/svn/tags/1.6.0 svn
    $ cd svn
    $ ./autogen.sh && ./configure
    $ make
    $ sudo make install
    $ make swig-py  # make sure you have swig 1.3 installed already
    $ make check-swig-py
    $ sudo make install-swig-py

    如果你在Ubuntu的Hardy版本,你可以在hardy-backports里找到1.5版的python-subversion: http://packages.ubuntu.com/hardy-backports/python-subversion
    这可能还需要安装backports里的libsvn1, subversion, mercurial-common, 和mercurial 包。

开始转换
现在我们开始转换– branches(分支), tags(标签)以及其他全部:

$ mkdir hg-client
$ hg convert http://projectname.googlecode.com/svn hg-client

一旦完成转换,你就可以push你最新的历史记录到你的Google Code项目中(前提是你有了一个空的Mercurial版本库):

$ cd hg-client
$ hg push https://projectname.googlecode.com/hg

至此,大功告成。

  • http://www.ediyang.com eddie

    :arrow: :arrow: :arrow: 不好意思 抢个沙花

    • http://leeiio.me/ Leeiio

      @eddie 来得早不如来得巧么..

  • Captain

    最近打算学习版本控制系统,谢谢你推荐的资料和教程 :twisted:

  • http://blog.sosohehe.com sosohehe

    公司的项目可不敢放google上做版本管理

  • http://zww.me zwwooooo

    我托管的很少,而且比较熟悉Subversion,hg就不折腾了

  • http://www.xiaoyulog.com 小宇

    你们的博客都做的好漂亮呀! :razz:

  • http://www.iqbee.cn 吖Bee

    目前我是一个都冇有托管 = =

  • http://www.dailysite.cn/ ooaixt

    google code确实好用

  • Pingback: 转换你的 Subversion 到 Git - Leeiio Chaos Made.

  • Pingback: 转换你的 Subversion 到 Git - Leeiio Chaos Made.

  • http://dddspace.com alswl

    SVN的机制还没有用活,继续停留在SVN上

  • http://ajaxjs.com frank

    前提是不是要有svn才能转换的呀

    • http://leeiio.me/ Leeiio

      @frank 没有SVN的话就不需要转了啊,新建的时候直接选择Hg就可以了。

  • 孤剑

    不懂。。。。 :eek:

  • http://www.liangkun.net liangkun

    :grin: 不错,

  • Pingback: Wiki | xilige