2015年12月16日 星期三

mercurial 初接觸

自己學的是 git, 也花了不少時間在 git 上, 可是現在需要使用 hg, 頓時所有的版本控制技能降到 0 了。hg 和 git 非常的不一樣, 本以為有了 git 的基礎, 可以快速上手, 但是搞砸了!

不管我在哪個 commit 或是 branch, hg log 一律列出「所有」的 commit log, 這對習慣 rcs/cvs/svn/git 的我來說造成了很大的困擾:

不管我在 changeset: 3:4fc0c9ba8667 或是 changeset: 2:70c5fe8f9e85, hg log 一律列出以下的 log

hg log 的查詢結果
 1 changeset:   4:836d78aa3d63
 2 tag:         tip
 3 parent:      1:f627f6077db4
 4 parent:      2:70c5fe8f9e85
 5 user:        descent.sung
 6 date:        Thu Nov 12 16:49:37 2015 +0800
 7 summary:     merge b1
 8 
 9 changeset:   3:4fc0c9ba8667
10 branch:      b2
11 parent:      1:f627f6077db4
12 user:        descent.sung
13 date:        Thu Nov 12 13:35:59 2015 +0800
14 summary:     b2 commit
15 
16 changeset:   2:70c5fe8f9e85
17 branch:      b1
18 user:        descent.sung
19 date:        Thu Nov 12 11:00:13 2015 +0800
20 summary:     branch 1
21 
22 changeset:   1:f627f6077db4
23 user:        descent.sung
24 date:        Thu Nov 12 10:52:06 2015 +0800
25 summary:     222 commit
26 
27 changeset:   0:5e0b4ad85965
28 user:        descent.sung
29 date:        Thu Nov 12 10:51:25 2015 +0800
30 summary:     111 commit

你知道我現在在哪個 commit 嗎?
那不知道的話會發生什麼事情呢?
事情大條了, 我不知道我現在的檔案是哪個 commit, 那我修改的時候我怎麼知道我改到哪個版本呢? 不知道習慣使用 hg 的朋友, 是如何對付這個問題的?

一開始沒搞懂, 所以在使用 hg 時沒能像 git 那樣得心應手, 整理以下指令, 勉強可以用 hg 了。

hg branch b1 # 建立 branch b1
hg update b1 # 切換到 branch b1
hg branches # 列出所有 branch
hg branch # 我在哪個 branch
hg (id)entify [--num] # 我在哪個 commit
hg update --clean # 撤銷沒有 commit 的 merge
hg log -b . # 顯示目前 branch 的 log
hg log -r commit_id1:commit_id2 # 顯示 commit_id1:commit_id2 的 log
hg log -r commit_id1:commit_id2 -b . # 顯示目前 branch commit_id1:commit_id2 的 log, 這相當於 git log 的表示法, 完全的不習慣

thg 是個 gui 的 hg 工具, 可以輔助使用。

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。