# 6.2.2\. 用Hg操作GitHub
Hg(又称Mercurial)和 Git 一样也是一个被广泛使用的分布式版本库控制工具。如果一个熟悉 Hg 的开发者参与托管在 GitHub 上的项目,大可不必为更换版本控制工具而苦恼,GitHub 上的一个名为 hg-git[[1]](https://github.com/schacon/hg-git)的开源项目可以帮上忙。
得益于 Hg 的强大的插件扩展机制,安装 hg-git 并将其注册为Hg 插件后可提供Hg操作 Git 版本库的能力。安装 hg-git 可以直接使用 **easy_install** 命令:
```
$ sudo easy_install hg-git
```
还可以直接从GitHub上下载hg-git最新代码进行安装:
```
$ curl -L -k -o hg-git.zip https://github.com/schacon/hg-git/zipball/master
$ unzip hg-git.zip
$ cd schacon-hg-git-*
$ sudo easy_install .
```
插件 hg-git 依赖于 Dulwich 项目,如果在安装过程遇到 Dulwich 无法编译,可能是因为缺乏 C 编译器,或者尚未安装 python-dev 软件包。Dulwich 是一个Python语言的 Git 实现,因此 hg-git 在运行过程中无需 Git 命令行。
和其他 Hg 插件类似,安装完毕后需要修改Hg配置文件(如文件 ~/.hgrc )如下,以启用 hg-git 插件以及另外一个必须的 Hg 内置插件 —— bookmarks 插件。
```
[extensions]
bookmarks =
hggit =
```
对 hg-git 安装配置完毕,就可以使用 Hg 操作 Git 版本库了。
* 克隆 Git 版本库。
```
$ hg clone git://github.com/ossxp-com/hello-world.git
$ cd hello-world
```
* Git 版本库的分支转换为 Hg 版本库中的 bookmarks。
新克隆的 Hg 版本库默认会更新到最新提交(即 tip 版本),未必处于所需的分支上。用命令**hg bookmarks**显示分支列表,命令**hg parents**显示工作区对应的版本。
```
$ hg bookmarks
helper/master 10:2767ad9d7008
helper/v1.x 8:994c2f0adc0b
master 1:dcd365e3175c
$ hg parents
修改集: 12:928384ca1e87
标签: jx/v1.0-i18n
标签: tip
用户: Jiang Xin <jiangxin@ossxp.com>
日期: Fri Dec 31 12:12:42 2010 +0800
摘要: Translate for Chinese.
```
* 切换到所需的工作分支(如master分支)。
用hg update -r命令切换分支。之后执行**hg bookmarks**命令会看到当前工作分支用星号标识出来。
```
$ hg update -r master
$ hg book
helper/master 10:2767ad9d7008
helper/v1.x 8:994c2f0adc0b
* master 1:dcd365e3175c
```
* Git 的里程碑也被记录,并可被 **hg tags** 命令显示。
```
$ hg tags
tip 12:928384ca1e87
jx/v1.0-i18n 12:928384ca1e87
jx/v2.3 10:2767ad9d7008
...
```
* 使用**hg pull**命令和**hg push**命令可以实现和Git版本库的同步。
* 有的命令如**hg outgoing**可在 1.7 版本的Hg中运行正常,但对于高版本库的 Hg 存在兼容性问题。
实际上 hg-git 插件并非只针对 GitHub 的版本库,而是可以支持任意 Git 版本库包括本地 Git 版本库。为了提供对 Git 版本库的透明支持,对 Git 版本库的 URL的写法有特殊要求,即要能够从协议名称区分开 Git 版本库和默认的 Hg 版本库。
* Git协议:
git://example.com[:port]/path/to/repo.git
* SSH协议:
git+ssh://[user@]example.com[:port]/path/to/repo.git
* HTTP协议:
git+[http://[user@]example.com[:port]/path/to/repo.git](/path/to/repo.git)
* HTTPS协议:
git+
* 本地协议:
/path/to/repo.git
- 前言
- 1. 探索GitHub
- 1.1. 什么是GitHub
- 1.2. GitHub亮点
- 1.3. 探索GitHub
- 2. 加入GitHub
- 2.1. 创建GitHub账号
- 2.2. 浏览托管项目
- 2.3. 社交网络
- 3. 项目托管
- 3.1. 创建新项目
- 3.2. 操作版本库
- 3.3. 公钥认证管理
- 3.4. 版本库钩子扩展
- 3.5. 建立主页
- 4. 工作协同
- 4.1. Fork + Pull模式
- 4.2. 共享版本库
- 4.3. 组织和团队
- 4.4. 代码评注
- 4.5. 缺陷跟踪
- 4.6. 维基
- 5. 付费服务
- 5.1. GitHub收费方案
- 5.2. GitHub企业版
- 6. GitHub副产品
- 6.1. GitHub:Gist
- 6.2. 其他版本控制工具支持
- 6.2.1. 用SVN操作GitHub
- 6.2.2. 用Hg操作GitHub
- 6.3. 客户端工具
- 6.4. 其他
- 7. 附录:轻量级标记语言
- 贡献者列表