hg 简明教程

作者: 王然kxxoling@gmail.com

关于 hg

hg 即 Mercurial,是一个跨平台的分布式版本控制软件,主要由Python语言实现,但也包含一个用C语言实现的二进制比较工具。其使用方式即原理与 git 相似,如果你已经有 git 使用经验,可以访问git 和 hg 面对面

hg 基本流程

以 42webhttps://bitbucket.org/z42/z42 为例,演示 hg 开发流程。

  1. 从远程仓库复制到本地

    https 协议从远程仓库获取代码:

    hg clone https://bitbucket.org/z42/z42

    或者也可以通过 ssh 协议:

    hg clone ssh://hg@bitbucket.org/z42/z42
  2. 添加新创建的文件:

    hg add file_name
  3. 修改本地代码并提交

    保存修改后,提交本地代码::

    hg commit -m "change log"

    或者也可以简写为::

    hg ci -m "change log"

    -m 表示关于本次提交的相关信息

    commit 时 hg 会自动 add 代码库中已修改的文件。

  4. 提交到远程仓库前,首先检查远程代码状态

    可以使用 hg diff branches 查看不同分支间差异

    使用 hg fetch 命令从其它分支拉取代码并合并,如合并代码出现问题,需要手动合并后再提交。

  5. 将代码提交到远程仓库:

    hg push
  6. 发起 pull request

    https://bitbucket.org/你的用户名/项目名/pull-request/new 发起一个新的 pull request

解决冲突

在 fetch 他人代码的时候,时常会遇到合并冲突的问题,因为有可能两人同时修改了同一个文件,这时需要先解决冲突(直接修改有冲突的文件),解决冲突后将其标注为已解决:

hg resolve -m file.name

Tips

  • 向版本库添加/删除文件hgadd/rm<path>

  • 移动版本库中的文件hgmv

  • 查找某段代码的责任人hgblame

  • 从现有代码初始化版本仓库hginit

  • 建立 hg 服务器hgserve

  • 更新代码库至最新提交hgupdate

  • 切换至分支hgupdate-r<branch>

  • 放弃所有修改,返回至上一个提交hgupdate-C

  • 搜索hggrep

  • 放弃某个文件的修改hgrevert

分支命名规则

命名示例: * bug/index_page * feature/founder_page

分支的目的如果是 bug 修复以bug/ 作为开头;同理,新需求则以feature/ 开头。这样能够明显地区分需求与 bug,并且以/为分隔符能够得到 SourceTree 这样的图形化版本控制工具更好的支持。

分支名中不需要添加创建者,因为一个分支通常会有多个开发者(一个前端一个后端)同时使用。

内部 Hg 服务器

公司内部基于Kallithea 开源系统搭建了一套 Hg web服务,内网配置 DNS 后可访问hg.pe.vc 注册账号并 fork 所需要的项目。使用流程如下:

  1. 注册 并联系管理员激活

  2. 登录并添加项目组

  3. 前往http://hg.pe.vc/<项目名>/fork 页面 fork 相应的项目。

其余操作和 GitHub、BitBucket 并无显著区别。

配置 Hg 记住密码功能

通过 Hg HTTP 协议操作项目时,往往需要重复输入密码,不像 ssh 方式便捷,可以通过插件实现 Hg 记住密码功能:

pipinstallmercurial_keyring

~/.hgrc 文件后写入:

[extensions]mercurial_keyring=

扩展阅读

Hg-42 区漫游指南

git 和 hg 面对面

HgInit 中文版