前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >版本管理工具Mercurial HG实用教程

版本管理工具Mercurial HG实用教程

作者头像
ExASIC
发布2022-03-29 14:16:25
1.8K0
发布2022-03-29 14:16:25
举报
文章被收录于专栏:ExASIC

一、介绍

Mercurial HG是基于python的开源分布式版本管理工具。与SVN不同的是,每个本地仓库都保存着完整的历史记录,即使远程仓库暂时离线,也可以进行本地版本管理,待远程仓库在线后再一起推送多次的修改记录。官网:https://www.mercurial-scm.org

二、常用命令介绍

1. 克隆到本地

代码语言:javascript
复制
hg clone http://server:8000/xxx    # 会自动创建xxx目录

也可以先建文夹,再克隆到当前目录

代码语言:javascript
复制
mkdir xxx
cd xxx
hg clone http:/server:8000/xxx .  # 克隆到当前文件夹,不会创建xxx目录

Tips

  • 克隆后切换到指定分支(默认是default分支):
代码语言:javascript
复制
hg clone http://server:8000/xxx xxx
cd xxx
hg branches #查看有哪些分支
hg update branch_name #切换到指定分支
hg branch #查看当前分支, 确认是否切换成功

分支相关的命令请参考后面的介绍!

2. 建立本地仓库

代码语言:javascript
复制
hg init

3. 添加、删除、重命名文件

代码语言:javascript
复制
hg add xxx.v
hg remove xxx.v
hg rename xxx.v yyy.v

4. 本地提交

代码语言:javascript
复制
hg commit -m "add/remove xxx function"

Tips:

  • 只想提交部分文件时,可以在commit后指定文件名,如:hg ci -m "xxx" test.v
  • 与Git不同的是,再次提交时不需要重新add文件。HG里没有Stage(暂存区)。

5. 与远程仓库同步

代码语言:javascript
复制
hg pull   # 远程->本地
hg push   # 本地->远程

Tips:

  • 当只想部分更新时(仅更新到指定版本),可以加参数-r REV,例如:hg pull -r 205。

6. 查看状态

代码语言:javascript
复制
hg status      # 查看状态
hg st          # 可简写
hg st -q .     # 查看状态时忽略untracked文件,其中-q是--quiet的简写

7. 分支

代码语言:javascript
复制
hg branch new_branch_name # 新建分支,commit后分支才真正创建
hg branch                 # 查看当前分支
hg branches               # 查看所有分支
hg push --new-branch      # 分支传到远端
hg update branch_name2    # 切换到分支branch_name2
hg update default         # 切换回主干

8. 切换到指定的版本号

代码语言:javascript
复制
hg update -r # 版本号

9. 查看与远端服务器的差别

代码语言:javascript
复制
hg incoming  # 只是看差别,不真正pull
hg outgoing  # 只是看差别,不真正push

Tips:

  • hg incoming -v用来查看远端改了哪些文件,提前判断是否有文件冲突。

10. 查看更新记录

代码语言:javascript
复制
hg tip        # 查看最新一次的提交
hg log -r     # 版本号
hg log -l 2   # 只看最新的两个版本
hg log -v     # 查看更新了哪些文件 (verbose) 
hg log -p     # 查看具体文件内容的差异 (patch)

Tips:

  • hg log -v默认的文件列表写在一行,如果文件较多,非常不方便查看。下面是一个解决方案。
代码语言:javascript
复制
changeset:   69:35e07e070136
branch:      a1n
tag:         tip
user:        Feng.Chen
date:        Thu Feb 27 12:52:32 2020 +0800
files:       .hgignore sim/rsim/report sim/script/run sim/script/run_regression.pl sim/script
/run_sim.pl sim/tc/seq/reg_wr_pri_seq.svh sim/tc/seq/reg_wr_pul_seq.svh sim/tc/seq/rgb_seq.sv
h sim/tc/w/tc_000_000.svh
description:
update 2020-02-27, change run_regression, run_sim, rgb_seq, testcase, etc

可以用

hg log -v | sim/script/get_update_list.py

(get_update_list.py是自己写的脚本,在项目script里)来美化文件列表,效果如下:

代码语言:javascript
复制
changeset:   69:35e07e070136
branch:      a1n
tag:         tip
user:        Feng.Chen
date:        Thu Feb 27 12:52:32 2020 +0800
files:
    .hgignore
    sim/rsim/report
       /script/run
              /run_regression.pl
              /run_sim.pl
    sim/tc/seq/reg_wr_pri_seq.svh
              /reg_wr_pul_seq.svh
              /rgb_seq.svh
          /w/tc_000_000.svh
description:
update 2020-02-27, change run_regression, run_sim, rgb_seq, testcase, etc

11. 合并

代码语言:javascript
复制
hg merge -r REV   # 把本地的最新版本与刚pull的最新版本进行merge,REV是pull的最新版本

Tips:

  • 任何情况下,不要用force参数。merge和push前应仔细确认文件合并是否有问题。

12. 放弃本地修改、撤销提交

代码语言:javascript
复制
hg revert xxx.v # 放弃本地修改,回到上次提交的状态
hg rollback     # 回到上一个版本,最新修改过的文件仍然保留

13. 误删除文件的恢复(已经加入版本库的文件)

也是用hg revert:

代码语言:javascript
复制
hg revert xxx.v

14. 不再跟踪某文件

代码语言:javascript
复制
hg forget xxx.v # 从版本管理里面把某文件去掉,文件还保留在本地,不会删除。

与hg remove的区别是,remove会删除本地的文件,而forget不会。

三、.hgignore的写法

有glob和regexp两种:

代码语言:javascript
复制
syntax: glob
*.mr
INCA_libs

syntax: regexp  # 即python的正则语法
^.*\.mr$

四、与svn、git命令对照表

总结如下图:

五、一些配置小技巧

hg的配置:分页看log、色彩、log带分支图

代码语言:javascript
复制
[extensions]
pager =
color =
graphlog =

[pager]
pager = more
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ExASIC 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档