转载 hg git 自:http://leeiio.me/synchronizing-a-mercurial-repository-with-git/

同步你的 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试试吧!

posted @ 2012-12-19 20:36  shalang  阅读(462)  评论(0编辑  收藏  举报