转载 hg git 自:http://leeiio.me/synchronizing-a-mercurial-repository-with-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试试吧!