Site Loader

近日重新安裝主機系統,心血來潮想說順便把用了很久的VCS(Version Control System,版本控制系統)從SVN換掉。
原本打算要試試看當紅的 git ,但研究了一陣子之後,決定採用看起來比較簡單易懂的 Mercurial 。
Mercurial 與 git 一樣都是分散式的 VCS ,兩者的比較可以參考這個連結(雖然有點過時了)。
總之,以下是我在 Ubuntu 12.04 上從 svn 移轉到 Mercurial 的歷程記錄:
1. 安裝 Mercurial 。很簡單,只要 apt-get 就可以了,這裡的 meld 是一個 diff/merge 程式,也可以不要裝。

$ sudo apt-get install mercurial meld


2. 安裝好了以後執行以下的命令,可以看到 Mercurial 的版本資訊。
(為什麼是 hg 呢? 因為 Mercurial[水銀] 的化學元素符號是 hg,相當有趣 XD)

$ hg version
mercurial 分散式版本控制系統 (版本 2.0.2)
(see http://mercurial.selenic.com for more information)
Copyright (C) 2005-2011 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

3. Mercurial 的公用設定檔案位於 /etc/mercurial/hgrc,
也可以修改 ~/.hgrc 為不同使用者打造不同的執行環境。以下是基本的設定:

# Mercurial configuration file
# See hgrc(5) for more information
# User Interface settings
[ui]
username=Name <[email protected]>
editor=vi
merge=meld
# Enabled extensions
[extensions]
hgext.convert=

4. 接下來要把原本的 svn repository 轉換成 mercurial 的 repository。
因為我們已經在.hgrc中開啟了 convert 這個外掛,所以轉換的方式其實很簡單:

$ hg SOURCE DEST

例如

$ hg svn/repo hg/repo

接著 mercurial 就會自動幫你轉換完成囉!詳細的選項可以看官網的Wiki介紹
5. 基本上到這邊就完成了,但是因為我通常是在 Windows 上編輯,
所以還要使用 TortoiseHg 取代原本的 TortoiseSVN。
使用 ssh 的方式與主機連線執行 push / pull 的動作,
若是有 private key,則需要在 mercurial.ini 增加以下設定:
(ini的位置預設存放於 C:\Documents and Settings\UserName\mercurial.ini)

[ui]
ssh = tortoiseplink.exe -ssh -i "C:\key.ppk" -l username

之後就可以開始使用 TortoiseHg 囉!
Mercurial 其實還有很多 publish repository 的方式,可以自行選擇適合的方案。
要注意的是,與 svn 不同,分散式的 VCS 在每個 local 端都有完整的 repository,
所以若是最後要將修訂的版本存放到主機上,還必須要使用 push 這個指令才可以喔!
單純 commit 的話就只會 commit 到 local 端的 repository囉。
* 這次轉換的時候遇到中文編碼造成的錯誤,無法將程式 pull 到 windows 系統上。
在 TortoiseHg 的設定->擴充套件->勾選win32mbcs可以解決大部分中文編碼的問題,但我的狀況是仍然無解。最後是從 Ubuntu 上把原有的中文檔案刪除並 commit ,再從 Windows 端把這些檔案 push 一次,在兩地就都可以順利運行。
但缺點就是 repository 會多存放一份一模一樣的檔案。
參考資料:
Mercurial Official Website
Mercurial: Thre Definitive Guide
Setup Mercurial on Ubuntu
Tortoisehg
How to let Tortoisehg use private key?

Post Author: starshine