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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM