7200 秒學會版本控制 - 使用 Mercurial

tonytonyjan 編著,版權沒有,翻印不究

時間:2011/11/11

地點:網路福利社社窩

學習版本控制工具卻不懂工作流程,就好比有一台 Steinway 鋼琴卻不懂如何演奏一樣。彈鋼並沒有硬性規定的形式,有各種流派、指法,只要能彈奏出好聽的音樂,那就是好方法;版本控制工具也是如此,工作流程並沒有一定的形式,Mercurial 只是工具,使用者可以發揮創意發展出自己的工作流程。Mercurial 有搭配許多工作流程的能力,這份講義僅列出若干常用的基本流程,但並不細說原理。對原理與細節有興趣的人請留意 11/11網路福利社社課,筆者會簡介其原理與分享微薄的使用經驗。

建立專案

$ hg init project
$ cd project
$ (add some files)
$ hg add
$ hg commit
(enter the commit message)

非線性開發(Merge)

$ (do some changes)
$ hg commit
(enter the commit message)
$ hg update 0
$ (do some changes)
$ hg commit
(enter the commit message)
$ hg merge
$ (optionally hg resolve)
$ hg commit

(enter the commit message)

複製專案

$ cd ..
$ hg clone project feature1
$ cd feature1
$ (do some changes)
$ hg commit
(enter the commit message)
$ cd ../project
$ hg pull ../feature1

匯出更動(Changeset)

$ cd project-clone
$ (do some changes)
$ hg commit
(enter the commit message)
$ hg export tip > ../changes.diff

匯入更動(Changeset)

$ cd ../project
$ hg import ../changes.diff


伺服器(Read-only Server)

$ hg serve &
$ cd ..
$ hg clone http://127.0.0.1:8000 project-clone

Pull from Server

$ cd ../feature1
$ hg pull http://127.0.0.1:8000

Google Code

$ (setup google code repo)
$ hg push https:/code.google.com/p/repo
(enter name and password in the prompt)
$ hg pull https:/code.google.com/p/repo

撤除(Backout)

$ hg backout 3
$ hg merge
(potentially resolve conflicts)
$ hg commit
(enter commit message. For example: "merged backout")

標籤(Tags)

新增標籤

$ hg tag -r 3 v0.1

瀏覽標籤並切換 revision

$ hg tags

$ hg update v0.1

分支(Branch)

$ hg branch feature1
(do some changes)
$ hg commit
(write commit message)

切換分支(Work on Another Brance)

$ hg update feature1
(do some changes)
$ hg commit
(write commit message)

合併分支版本(Merge Branch)

When you finished the feature, you merge the branch back into the default branch.

$ hg update default
$ hg merge feature1
$ hg commit
(write commit message)

關閉分支(Close Branch)

$ hg update feature1
$ hg commit --close-branch -m "finished feature1"