zoukankan      html  css  js  c++  java
  • mercurial的几个易用性小技巧

    其实这两年,能够采用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 =
    

    效果图:

    hg diff with color extension

    hg log with color extension

    详细说明: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

  • 相关阅读:
    WCF学习笔记之传输安全
    JavaScript –type
    详解android的号码匹配
    list和用vector区别(Vector相当于是数组,读写快,插入慢)
    拒绝收购邀请,三年专注开发,开源的私有云盘“迷你云”(十人团队在三年时间里靠自筹资金专注开发出来的作品)
    无功不受禄
    如何判断是否安装了VC RUNTIME
    GExpert 1.38 实验版含经典代码格式工具 Berlin 编译版
    初始化IoC容器(Spring源码阅读)
    JavaScript函数绑定
  • 原文地址:https://www.cnblogs.com/bamanzi/p/mercurial-a-few-tips.html
Copyright © 2011-2022 走看看