第一次 hg (Mercurial) 就上手

因為實在是被 svn 氣過不少次,所以打算慢慢轉往其它的 version control 軟體研究。

Mercurial
最近因為被 svn 搞到不少次,有點想要開始研究其它的版本控制軟體,在許多朋友的介紹下,開始嚐試了 hg (Mercurial) 這個版本控制軟體。

首先最讓人開心的一點就是,hg 只會在你的目錄的 root 下建一次 .hg 的目錄,不會像 svn 那樣每個 sub-directory 都會建一次 .svn 目錄,當然 svn 那樣的好處就是可以把一堆專案放在同一個 repository 下,不過因為我本身不是很喜歡這種作法,所以 hg 的乾淨反而很吸引我。

hg 全是以 Python 寫成的軟體,如果你已經裝好 EasyInstall 的話,可以直接以

easy_install Mercurial

來安裝它,而 Windows 下也有 TortoiseHg 這個整合視窗環境的版本可以安裝使用。

開始使用前別忘了去修改 $HOME/.hgrc 加入

[ui]
username = Foo Bar

來建立自己的身份(在 commit 的時候才知道誰是兇手)。

建立 Repository

要將某個目錄下全部納入版本控制,只要在該目錄(e.g., foo/)下執行

# hg init

就建好一個 repository 在 foo/.hg 下面了。

將檔案納入 repository

有了 repository 之後,當然就是要決定把哪些檔案納入 repository 中作版本控制。hg 與其它軟體一樣,就是用 hg add <檔案名> 來把檔案加入 repository,然後用 hg commit 來進行 commit 的動作。

當然你也可以用 hg status 來觀察目前 repository 中檔案的狀態(正被新增、修改過、尚未納入的檔案、有衝突、等等)。然後用 hg parents 來觀看目前 repostiory 的修改記錄,或是使用 hg log 看歷史記錄。

取出之前的版本

當你在用 hg parents 或是 hg log 在觀看修改記錄時,都會發現 repository 中有個 changeset 的記錄,格式為

版本:changeset ID

當你已經進行多次 commit 之後,如果想要回溯至之前某個版本時,就可以先在另一個目錄使用

hg clone -r 1234 foo bar

來將 foo repository 的版本 1234 複製一份到 bar repository 下。而版本也可以用 changest ID 來指定。

分散式版本控制

上面提的狀況都是在自己機器上作版本控制,如果想要透過網路來做的話,在你的 repository 下執行

hg clone https://example.com/abcd/

來透過 HTTP 來取得 abcd repository 中最新的資料到機器上。直接連接這個網站也有 web 介面可以觀察 repository 的資料。

而當在自己的 working copy 作了許多修改,也作了 commit 之後,如果想要從 remote repository 中取得更新的資料,就得使用 hg pull https://example.com/abcd/ 來取得(因為 hg update 只是在你的 working copy 裡 update),最後如果要送交到 remote repository 上則是使用 hg push https://example.com/abcd/ 。(當然你得要有送交的權限)

先介紹到這裡(可能會有些錯誤),不過等到我更熟悉 hg 之後再來多寫一點好了 😛

  • 我刚刚接触git,看了你介绍的mercurial,
    感觉他们还真是有不少相似之处啊。