2013年12月7日 星期六

HG(Mercurial)的指令記錄

最近因為一些因素接觸到Mercurial這套版本控管的工具,在網路上都可以找到一些基本的教學,不過我主要先記錄一些我常用的指令就好了。之後有空會再慢慢補齊 。

先簡單介紹Mercurial,Mercurial的中文應該有很多意思,不過我想應該要翻成水銀,因為水銀的化學符號是hg,所以在打指令時都是hg開頭,另外,他是使用python所開發的,所以P派的人應該跟他比較熟吧XD,是類似git的分散式版本控管的,分散式版本控管的優點是,可以在本機端做版本控管,如果有需要再將檔案上傳至遠端主機上,這大幅度的降底主機的儲存成本,又可以更快速的做版本控管的動作,所以才會有github和bitbucket的網站出現。

*藍色的字是根據你實際狀況建立的名稱



第一步:建立HG的專案和基本設定

主要有二種情況,一種是遠端主機上無此專案,另一種則是遠端主要上已有些專案了

  • 遠端主機上無此專案

如果要建立新專案的話,先建立hg的目錄,輸入
hg init
到目錄底下的.hg/hgrc這個檔案中設定
主要是設定遠端主機的url和commit的username
[paths]
default=https://username@bitbucket.org/owner/project name/
[ui]
username=your name
可以使用Bitbucket這個類似Github的網站來做來遠端的版本控管主機
首先要在Bitbucket建立一個repository

將hg目錄新增至bitbucket
hg push https://username@bitbucket.org/owner/project name/ 如果有設定default path就不用輸入目的地

  • 使用遠端主機上的專案
如果,想要的project已經存在bucket上時,可以直接從上面複製下來,不用從頭建立,但還是需要設定.hg/hgrc,可以參考上面的設定
hg clone (https://your name@bitbucket.org/project owner/project name/)

第二步:本機端的版本控管

每次有新檔案時,都要新增檔案
hg add filename 想偷懶可以打
hg add *.* 如果有需要的話可以設定ingore檔,這樣特定的檔案類型就不會被新增了

再來commit到本機端
hg commit 會跳出筆記本讓你編輯(Linux版本應該是ui)
如沒有跳出筆記本的話,可能需要到.hg/hgrc設定
[ui]
editor=notepad.exe
或是在commit直接輸入註解
hg commit "your comment"

第三步:遠端的版本控管

主要有三個指令
將檔案和一些設定上傳至遠端主機上
hg push
將檔案從主要下載下來
hg pull
將檔案更新到最新的版本
hg update

第四步:分支的版本控管


branch的管理,當要建立一個新的分支來開發程式時所需要的指令

先查看一下目前在那個分支
hg branch
再查看一下有那些branch已被建立
hg branches
建立一個新的branch
hg branch branch name
在remote端建立branch的資訊
hg push --new-branch
之後我們就可以用push來上傳檔案

如果我們要在已存在的branch切換時,使用
hg update branch name 這樣會將資料更換到那個branch的最新資料,記得切換前要commit檔案

有時在使用update做branch的切換時會遇到一些問題
基本上會一個分支為出發點看你要取什麼名字,比如
hg branch stable 表示這個版本的分支是穩定版

在根據你的新功能從stable開立新分支
hg branch new_branch
當你開發完想做merge時,可以回到stable做merge的動作
hg update stable
hg merge new_branch

另外一個比較特別的情況是,當你回到stable做pull後,想回new_branch時,可能因為版本的差異造成無法切換,解決的辦法有merge和clean,merge已經在上面提過了, clean的方式是
hg update --clean 不過這個方法是確定新分支的修改都不要時才建議使用,各位可以想想是否有更聰明的辦法

第五步:其它常用的指令

我有一些比較常用的指令
如查看log檔
hg log 可以加上-l來選擇要秀最近的幾筆log
hg log -l number
其它我還未使用過的指令,但應該也是蠻有用的指令,我也大概先列出來,有興趣的朋友可以自已研究進一步的用法
hg st      看主線被合併進來的檔案
hg diff     看原始碼差異

結語

只是大概對我目前有用到的指令做個簡單的記錄,下面的網址算是我比較看的懂的介紹,有興趣的朋友可以看看,基本上我之後應該還是會使用git為主,而 hg和git就目前這些指令看起來使用上並沒有什麼不同,不過應該還是有些細微上的差異,比如hbase和branch的管理方式,這當然會對開發造成影響,所以是多人的 group在使用的話,最好還是做進一步的了解在使用。

參考資料



沒有留言:

張貼留言