乐趣区

版本管理-Hg-Mercurial-使用小结

背景

由于最近公司即将从 Mercurial 版本管理迁移到 GitLab 上,特此写下此文纪念一下。

什么是 Hg Mercurial

Mercurial在 IT 界是跨平台的分布式版本控制软件,主要由 Python 语言实现。主要是命令行程序操作,图像化呢也有。由于该软件命名中文翻译是——水银,为了输入命令时方便,用元素命名 Hg 来作为调用程序的关键字。

目前网络上提供托管服务的有bucket

wiki

作者我呢,用过 svn,git,最后才接触 hg,用来的感觉吧。命令像 git,但没 git 那么复杂,说他像 svn 呢,感觉这软件比较年轻。

基本操作

## 帮助
$ hg help

## 初始化:$ hg init

## 查看状态,会展示对改动了哪些被跟踪文件,新增未跟踪文件,冲突文件
$ hg status

## 查看远程仓库地址
$ hg paths

## 查看当前分支
$ hg branch

## 查看日志
$ hg log

内容管理

## 从远程仓库克隆到本地
$ hg clone ssh://code@code.example.com/repository

## 新增文件
$ hg add "file-name"

## 在做了更改后
$ hg commit -m 'change description...'

## 推送该分支的更改到远程仓库
$ hg push -r "version_number"

## 从远程仓库拉取
$ hg pull

## 将拉到本地远程仓库的内容和本地仓库合并
$ hg fetch

## 撤销对当前文件的修改
$ hg revert "file-name"

## 撤销上一次提交, 并将上一次提交的内容,放入待提交区
$ hg rollback 

特别说明一下 hg rollback 只能回滚一次。意思是:如果你提交了两次,运行 rollback 两次,也只能回滚最近的那一次。

分支管理

## 创建分支
$ hg branch "new_branch_name"

## 切换到该分支
$ hg update "branch_name"

## 将这个分支合并到当前分支上
$ hg merge "other_branch_name"

## 推送该分支的改动到远程仓库
$ hg push -b "branch_name"

这分支操作,SVN 的感觉

草稿

hg 草稿管理

## 将当前的被跟踪的改动存到草稿,并命名
$ hg shelve --name "draft_name"

## 展示当前项目的草稿
$ hg shelve --list

## 将这个保存在草稿内的改动应用到当前项目
$ hg unshelve "draft_name"

类比git stash, 使用该功能需要开启拓展 shelve

对比

## 查看当前对跟踪文件的改动
$ hg diff

## 查看当前版本对于 "version_number" 版本的不同
$ hg diff -r "version_number"

## 查看 ver2 相对于 ver1 的改动
$ hg diff -r "ver1" -r "ver2"

拈来

## 将该版本的提交记录直接复制过来, 命令成功后,会在当前分支生成一个提交记录!$ hg graft -r "rev"

就是 git cherry-pick

补丁 导入

## 将当前已跟踪文件的更改导入 ./code.patch 文件内
$ hg diff > code.patch
## 将文件内改动应用到当前项目
$ hg import code.patch --no-commit

你可把这个功能当保存草稿用,也能离线推送编辑给别人

其他

hg 日志查看

## 查看最新版本
$ hg tip

## 查看日志,并附上分支图
$ hg log -G

## 查看这次提交的日志
$ hg log -r "version_number"

hg 使用了自增自然数,和 hash 字符共同管理版本号,集 svn,git 版本号于一身,这下你挑不出毛病了吧

## 查看上一个版本提交日志
$ hg parent

配置

全局配置文件放在 ~/.hgrc,当前项目的配置文件放在./.hg/ 隐藏目录内。远程仓库 的路径记录在 ./.hg/hgrc 内。

提交用户

配置提交时署名

## file ~/.hgrc
[ui]
username = zhang3 <zhang3@example.com>

拓展管理

hg的拓展管理使用 ini 格式文件管理,内部拓展只需要写上拓展名就像开关一样,使用第三方拓展需要指明拓展文件路径。


[extensions]
shelve =
strip =
my_ext = ~/my_ext.py

常见问题

  1. sparse-revlog 相关的报错

这个是各个 hg 版本兼容性问题。

  1. 改了配置文件,没生效

如果你在使用 SourceTree, TortoiseHg 等这样的可视化版本管理工具,一般会自带一个 hg 软件,要注意改动路径。

退出移动版