同步你的 Mercurial(Hg) 和 Git 版本库

同步你的 Mercurial(Hg) 和 Git 版本库
我的Vim的配置文件之前都是托管在Bitbucket的,因为公司用的也是Hg,所以相对对于Hg使用更熟练一点。虽然Hg和Git都是分布式版本管理工具,但是Hg在使用上以及学习上确实简单不少,很容易上手了。但是还是有很多人是喜欢用Git的,所以我必须要把我的Vim的配置同时用Git来进行版本管理,然后push到著名的Github网站,这样Git使用者也可以很方便的watch以及pull我的最新配置(虽然目前还没有什么人watch…)。

之前的做法比较傻,为了让Git和Hg管理同一个目录,通常操作完Hg的push,然后再用Git进行commit然后push,虽然也是能达到版本库同步的目的,但是很繁琐,因为要分别用Hg和Git进行commit和push操作,有时候还会面临merge问题,实在不是一个好方法。

那肯定是有更好的方法咯?当然!有一个Hg的插件叫做Hg-Git正好满足了这样的需求。

什么是Hg-Git

Hg-Git是Mercurial(Hg)的扩展插件,为Hg增加了从Git服务器pull和push到Git服务器的功能。这意味着你可以从Git的服务器上pull代码然后转变成Hg版本库来进行管理,同时意味着你可以同时把你的Hg版本库push到Git服务器。

安装Hg-Git

简单方式

在你的命令行终端里运行easy_install hg-git,然后查看你的~/.hgrc文件里是否有如下几行代码

[extensions]
hgext.bookmarks =
hggit =

esay_install 是python 包管理工具,它的作用类似于Php中的pear,或者Ruby中的gem,或者Perl中的cpan,或者haskell 中的cabal。

手动方式

从Hg-Git托管在Github的代码库http://github.com/schacon/hg-git/zipball/master里下载然后放置到某个目录。当然前提是你安装了0.4.0或者更新版本的dulwich。你可以使用easy_install ‘dulwich>=0.4.0’ 命令进行安装如果你安装了setuptools。接着打开你的~/.hgrc文件,复制并编辑如下配置

[extensions]
hgext.bookmarks =
hggit = [path-to]/hg-git/hggit

这样就安装好了Hg-Git扩展,这里的配置中bookmarks的配置并不是必须的,但是当在push的时候它会被转化成Git的heads。

用法

如果你想要用Hg clone一个Git版本库,只需使用hg clone [url]便可,例如

$ hg clone git+ssh://git@github.com:Leeiio/Vim.git

push的命令也很简单

$ hg push git+ssh://git@github.com:Leeiio/Vim.git

如果不想每次输入这么长的git服务器地址,你可以打开.hg/hgrc文件,编辑如下

[paths]
default = https://leeiio@bitbucket.org/leeiio/vim
git = git+ssh://git@github.com:Leeiio/Leeiio.git

这样便可以直接使用如下命令来进行push操作了

$ hg push git

更多使用方法参见 http://github.com/schacon/hg-git

同步目前已存在的Hg版本库到Git

从bitbucket服务器clone一份Hg的版本到本地做示范用,如果你本地已经存在一份需要被转换以及同步的Hg版本库就略过此步骤,只要cd要你的Hg管理的项目目录即可。

$ hg clone https://leeiio@bitbucket.org/leeiio/vim vim-test
requesting all changes
adding changesets
adding manifests
adding file changes
added 23 changesets with 418 changes to 239 files
updating to branch default
239 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd vim-test/

创建一个bookmark,然后push到Git服务器

$ hg bookmark -r default master
$ hg push git+ssh://git@github.com:Leeiio/vim-test.git
pushing to git+ssh://git@github.com:Leeiio/vim-test.git
importing Hg objects into Git
creating and sending data
git::refs/heads/master => GIT:092e7cf3

如果你想从Git服务器上pull最近的更新的话也可以直接是用Hg的pull命令

$ hg pull git+ssh://git@github.com:Leeiio/vim-test.git
pulling from git+ssh://git@github.com:Leeiio/vim-test.git
importing Hg objects into Git
Total 0 (delta 0), reused 0 (delta 0)
importing Git objects into Hg
(run 'hg update' to get a working copy)

是不是超级简单且强大的一个玩意?如果你也有这样的需求,那么就下载Hg-Git试试吧!

  • 华丽的沙发!

  • 博主您好,请问可否交换下友情链接呢

  • :roll: 纯飘过,只熟练于svn,惭愧!

  • 呃。。。完全不懂是什么。。。惭愧。。。

  • 说的很对,我很赞同

  • 好东西不早分享。。。git用得不习惯。。。 🙁

  • 果断去试试嘛~~~

  • 小野大神

    我那个脑残公司还在用VSS 2005 = =..最近特别开会强调, 要加强开发管理, 养成每日使用VSS check in/ checkou习惯. 对此除了无语我真的无话可说.

    PS: 试用了Git.. 决定还是继续用svn管理自己的源码库, 分布式版本控制系统离开多人并行开发和源码合并就毫无意义.

    • @小野大神 恩,一个人的话确实svn还是比较适合的,并且有google code可以托管代码,但是用git的话因为有github这个强大的托管网站,所以还是不错的。

    • 路人

      @小野大神 用source safe就是脑残公司了?你这种想法才是比较脑残的。source safe非常适合所有开发者都位于同一个局域网上,而且彼此间的物理距离很近的情况,我敢说,你那脑残公司绝对属于这种情况。

  • 写得不错

  • .. 太高端了 ~
    我还在纠结于在ubuntuServer里面安装gd-2.0.35.tar.gz ~
    先解压,然后./configure –prefix=/usr/local/gd2 ~
    然后make,接着就木有了 ~
    root@LinuxSrv:/home/evlos/bags/gd-2.0.35# make
    cd . && /bin/bash /home/evlos/bags/gd-2.0.35/config/missing –run autoconf
    FATAL ERROR: Autoconf version 2.54 or higher is required for this script
    make: *** [configure] Error 1
    刚才configure都进行到了config.status: executing depfiles commands ~
    哎,杯具,你知道怎么回事不? 😳 😳 😳

    • @小邪

      zlib包
      shell> ./configure --prefix=/usr/local/zlib
      shell> make check
      shell> make install
       
      libpng包(支持PNG)
      shell> ./configure --prefix=/usr/local/libpng
      shell> make
      shell> make install
       
      jpeg-6b包(支持jpg格式)
      shell> ./configure --prefix=/usr/local/jpeg-6b --enable-share --enable-static
      shell> make test
      shell> make
      shell> make install
      shell> make install-lib
       
      freetype包(字体支持)
      shell> ./configure --prefix=/usr/local/freetype
      shell> make
      shell> make install
       
      最后安装gd包
      shell> ./configure --prefix=/usr/local/gd2 --with-jpeg=/usr/local/jpeg-6b --with-zlib-dir=/usr/local/zlib --with-png=/usr/local/libpng --with-freetype=/usr/local/freetype
      shell> make
      shell> make install
    • @Leeiio 哇,太详细了,感动ing ~ 😥 😥 😥 😳 😀
      多谢,成功鸟 ~

    • @小邪 客气客气,举手之劳。

  • 看不懂。。惭愧

  • :mrgreen: 这里还是那个乱。但是很有序。哈哈哈。我要开始钻研wp了。得给公司弄个网站。

  • 更新了关注下

  • 我比较喜欢Git 🙂

  • 学习了

  • 我什么都看不到。。。。

  • 不错。哥哥飘过..

  • 预祝博主国庆快乐,合家美满!

  • 打酱油路过 :mrgreen:

  • 惊,看看美女是怎么造出来的http://www.1688lx.com给你揭秘

  • 桂林桂花园,专业的桂花树基地。

  • 😆 Pia!(o ‵-′)ノ”(ノ_<。) 还不更新

  • 冷空气袭来,大家注意保暖了。现在,看一个感冒可贵了!!!

  • 说得很好,又学到新知识了,谢谢。。。。

  • 来这里耍耍,学习下博客的操作技巧,博主不要介意。

  • 你们都是大神啊.什么都懂啊.

  • hg看起来确实比git更加容易上手,而且扩展,文档之类挺多的

    另外,watch了lz的vim配置,正在研习中

  • 没有讲到push的前提是需要git方面的设置。如果加上这个步骤文章就更加全面了。

  • Pingback: 大蕉 » Hg代码管理转换Git代码管理-方便xcode使用Git()

  • sp42

    支持HG!