# 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. 附錄:輕量級標記語言
- 貢獻者列表