其实这两年,能够采用mercurial的项目我都尽量用,甚至有些上游是git的,或者需要托管到公司内gitlab上与别人协作的,我都装上hg-git。无它,只是因为mercurial易用性比git好得多——比如我一直记不清git reset[那么多神奇的功能](http://git-scm.com/2011/07/11/reset.html)

下面是几个小技巧,可以让易用性进一步改善

输出自动自动分页

hg log缺省会一口气输出所有commit记录,这很可能不是你想要的,所以你不得不自己加pager: hg log | less

另一个办法是启用pager这个扩展,实现跟git log一样的行为:自动调用less显示输出(这样也可以用上less的搜索功能了)

~/.hgrc添加如下配置

[extensions]
pager = [pager]
pager = less

然后hg log就会自动调用less来分页了

补充说明:

  1. hg diff, hg annotate等命令也会。详细列表可用hg help pager查看[pager]attend设置的默认值,这个配置项决定了哪些命令的输出会用pager。也可以通过在~/.hgrc中设置这个值,比如hg help命令默认就没有启用pager,所以可以修改为:
  [pager]
attend = annotate, cat, diff, export, glog, log, qdiff, help
  1. 如果设置了环境变量PAGER,则会优先采用环境变量指定的pager,忽略.hgrc的值
  2. 如果使用less为pager的话,推荐设置为:
[pager]
pager = 'LESS=FRX' less

或者设置环境变量LESS='FRX'。less的选项-R是为了支持ansi color的(参看下面的color扩展说明),其它参数的具体含义可查看explainshell网站的解释或者参看less的manpage

详细说明: http://mercurial.selenic.com/wiki/PagerExtension

加点色彩

Color这个扩展 可以给hg statushg diff的输出加上颜色,使得输出看起来更清楚。

启用方法:编辑~/.hgrc

[extensions]
color =

效果图:

详细说明:http://mercurial.selenic.com/wiki/ColorExtension

查看分支/合并关系

如果你的hg库里面有分支(有名或者匿名的),很难从hg log的输出里看出关系来(从哪里分支的,在哪里合并的)。

方法一: 用hg serve在web浏览器上查看分支关系

hg比git好的一点是,如果你工作在一个没有装X window的服务器,没法运行一些GUI的hg前端时,你可以简单地用hg serve起一个web 服务,然后在浏览器查看。那里面可以看到分支关系(点击左边的Graph进入)

方法二: 用GraphLog扩展

另一个办法更简单:启用graphlog extension,然后用hg glog命令查看。

启用方法是编辑 ~/.hgrc:

[extensions]
graphlog =

hg glog的效果如下:

参考: Stay Sane with Graphlog / hg tip

为pull/push设置不同的远端地址

我常用的一个操作是:在家里推送到bitbucket网站,到公司后从bitbucket网站将内容拉下来,推到公司内的一个Kallithea 实例上。

[paths]
default = http://bitbucket.org/bamanzi/misc-utils
rhodecode = http://rhodecode.example.com/yang.guilong/misc-utils

然后我用如下命令完成代码的同步

hg pull -u
hg push rhodecode

其实hg支持对pull/push设置不同的地址 :

[paths]
default = http://bitbucket.org/bamanzi/misc-utils
default-push = http://rhodecode.example.com/yang.guilong/misc-utils

于是我可以简单地执行下面的命令完成两个库的同步

hg pull -u
hg push

当然,采用这个技巧,只是少敲了几个字符而已,不过至少可以少记忆一个别名。

用外部比较工具查看差异

很多时候我们想用其它工具来比较整个文件的前后差异(有的时候是因为不熟悉hg diff的输出格式(阮一峰有篇博客文章读懂diff讲解得比较清楚),有的时候是前后差异的确有点复杂以至于diff的输出不能正确反映代码在逻辑上的差异)。

方法一

这种情况下DiffUse很值得推荐,它有个不错的功能是能感知文件夹内的版本控制系统(比如mercurial, git, subversion...),并支持比较两个revision的差异:

# compare revision 123 of foo.C and revision 321 of foo.C
diffuse -r 123 -r 321 foo.C # display a 3-way merge between revision MERGE_HEAD of foo.C,
# the local foo.C file, and revision HEAD of foo.C
diffuse -r MERGE_HEAD foo.C foo.C -r HEAD foo.C

​### 方法二:启动ExtDiff扩展

[extensions]
hgext.extdiff = [extdiff]
cmd.vimdiff = vimdiff # add new command called vimdiff, runs gvimdiff with DirDiff plugin
#(see http://www.vim.org/scripts/script.php?script_id=102)
# Non english user, be sure to put "let g:DirDiffDynamicDiffText = 1" in
# your .vimrc
cmd.vimdiff2 = gvim
opts.vimdiff2 = -f '+next' '+execute "DirDiff" fnameescape(argv(0)) fnameescape(argv(1))' # add new command called vdiff, runs kdiff3
cmd.vdiff = kdiff3 # add new command called ediff, runs emacs ediff
cmd.ediff = sh
opts.ediff = -c 'if [ -d $0 ]; then emacs --eval "(ediff-directories \"$0\" \"$1\" \"\")"; else emacs --eval "(ediff-files \"$0\" \"$1\")"; fi'

然后就可以用如下命令来对比文件了

hg vimdiff rope/base/fscommands.py

hg vimdiff2 -r 31 -r 32 rope/base/fscommands.py

hg ediff rope/base/fscommands.py

详细说明: ExtDiffExtension

mercurial的几个易用性小技巧的更多相关文章

  1. 前端网络、JavaScript优化以及开发小技巧

    一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

  2. Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具

    前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...

  3. 分享两个BPM配置小技巧

    1.小技巧 流程图修改后发布的话版本号会+1,修改次数多了之后可能会导致版本号很高,这个时候可以将流程导出,然后删除对应的流程包再导入,发布数据模型和流程图之后,版本清零 2.小技巧 有的同事入职后使 ...

  4. linux系统维护时的一些小技巧,包括系统挂载新磁盘的方法!可收藏!

    这里发布一些平时所用到的小技巧,不多,不过会持续更新.... 1.需要将history创建硬链接ln 全盘需要备份硬链接 ln /etc/xxx /home/xxx 2.root用户不可以远程 /et ...

  5. JS处理事件小技巧

    今天,就分享一下我自己总结的一些JS的小技巧: ①防止鼠标选中事件 <div class="mask" onselectstart="return false&qu ...

  6. iOS:小技巧(不断更新)

    记录下一些不常用技巧,以防忘记,复制用. 1.获取当前的View在Window的frame: UIWindow * window=[[[UIApplication sharedApplication] ...

  7. css小技巧(1)

    1.-webkit-overflow-scrolling: touch; 解决ios滑动时无缓冲问题 2.::-webkit-scrollbar 设置ios滑动时是否显示滚动条 3.::selecti ...

  8. 最强 Android Studio 使用小技巧和快捷键

    写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...

  9. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

随机推荐

  1. js数据结构之栈和队列的详细实现方法

    队列 队列中我们主要实现两种: 1. 常规队列 2. 优先队列(实际应用中的排队加急情况等) 常规队列的实现方法如下: // 常规队列 function Queue () { this.queue = ...

  2. 利用SQL为Code128码添加起始符和休止符

    在利用code128码字体打印条码是,打印出来的条形码,扫描枪会出现认不出的情况,这种情况是由于直接将文本设置为code128字体而没有给他们指定起始符和休止符引起的. 经过查资料获发现好多人遇到这样 ...

  3. CodeForces903G Yet Another Maxflow Problem 扫描线 + 线段树 + 最小割

    给定两条链\(A, B\),其中\(A\)链某些点向\(B\)链有连边,支持修改\(A\)链中的某条边权以及查询\(A_1\)到\(B_n\)的最大流 显而易见,\(A\)和\(B\)链中一定满足左部 ...

  4. [COGS2554][SYZOJ247][福利]可持久化线段树

    思路: 主席树模板. 注意内存的分配,原始的线段树有$2n$个结点,每次更新时最多增加$log(n)$个结点,总共有$q$次询问,所以存储结点的数组大小为$2N+q log(n)$. #include ...

  5. Tinkoff Challenge - Final Round (Codeforces Round #414, rated, Div. 1 + Div. 2) 【ABC】

    老年人题解,语言python3 A - Bank Robbery 题意:给你ABC,以及n个数,问你在(B,C)之间的数有多少个. 题解:对于每个数判断一下就好了嘛 x,y,z = map(int,i ...

  6. Linux中ls -l(ll)返回结果中的文件访问权限-rw-r--rw-

    linux文件访问权限(像rw-r--rw-是什么意思)   Linux的文件访问权限分为 读.写.执行三种 r:可读(4) w:可写(2)对目录来说则可新建文件 x:可执行(1)对目录来说则可进入该 ...

  7. android 布局文件 ScrollView 中的 listView item 显示不全解决方案

    import android.content.Context;import android.util.AttributeSet;import android.widget.ListView; /** ...

  8. 这可能是最好的RxJava 2.x 入门教程(一)

    这可能是最好的 RxJava 2.x 入门教程系列专栏 文章链接: 这可能是最好的 RxJava 2.x 入门教程(完结版)[重磅推出] 这可能是最好的RxJava 2.x 入门教程(一) 这可能是最 ...

  9. JPA查询单个字段和多个字段返回类型总结

    原文地址:https://blog.csdn.net/weixin_40326509/article/details/80865646 在使用springboot中,需要使用JPQL和SQL去查询记录 ...

  10. zeromq学习笔记1——centos下安装 zeromq-4.1.2

    1.前言 MQ(message queue)是消息队列的简称,可在多个线程.内核和主机盒之间弹性伸缩.ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核”.现在还未看到它们的成功. ...