mercurial簡單使用說明

開始
這份文件是紀錄了mercurial 一些指令的簡單說明.幫助工程師可以簡單的上手使用mercurial.我們假設看文件的人已經有了一點點版本控制系統的概念
  • 安裝:想要在windows作業系統安裝mercurial ,可以前往mercurial 的官方下載網頁http://mercurial.selenic.com/downloads/ 下載最新版本的mercurial for windows.下載的檔案是標準的windows 安裝檔(.msi),雙擊下載檔案便可step by step 安裝mercurial.
    想要在*unix 系統安裝mercurial , 請聯絡系統管理員安裝mercurial.如果是debian and ubuntu ,可以用APT安裝

    #apt-get install mercurial
     
    如果是RedHat, fedora,CentOS,則可以用

    #yum install mercurial


    目前還有更方便的mercurial GUI工具:TortoiseHg . TortoiseHg提供GUI化的操作,直覺化的滑鼠右鍵選單.不過這份文件主要還是以說明命令列式的操作為主
  • 新開始一個版本控制專案:
    假設在E:\Project\code\中我們有一個a.c.那麼我們需要下指令以新增一個受mercurial 管理的專案.指令如下 :
    hg init
    指令完成後,/Project/code/目錄下 多了一個目錄 ".hg".這個.hg就是檔案庫 (Repository ).裡面放置了mercurial 管理版本控制的任何資料,像是目前狀態,版本號, 更新紀錄,所有的分支,所有的合併紀錄等.原來的E:\Project\code\則稱為工作複本(work copy).任何時候,寫程式的人都是在修改工作副本的檔案.
    目前檔案庫裡是空的
  • 開發者的身份:
    首先要設定開發者的身份.身份資料會在mercurial 更新檔案庫時被紀錄.用途是紀錄異動是由誰提交的.所以身份資料至關重要.沒有人希望在查詢某年某個修改時卻不知道元兇是誰.*unix 環境如果不紀錄身份,Mercurial 會使用目前登入這個shelluser 作為身份.如果在windows 環境,沒有紀錄身份則不准提交異動.
    要設定身份得要前往檔案庫目錄(這邊的例子是 E:\Project\code\.hg).在檔案庫目錄新增一個hgrc檔案,新增如下內容
    [ui]
    username = your_name

    然後存檔,就可以了
  • 新增/刪除檔案:指明要加入mercurial 管理的檔案,指令如下

    hg add [
    檔名]
    指明要從檔案庫移除的檔案,指令如下

    hg remove [
    檔名]
    如果只想把xx.c納入管理,可以用 hg add xx.c ,如果想把所有目錄下的檔案納入管理,可以使用 hg add * hg add 就可以了.刪除檔案也是一樣的.然後,使用新增/刪除指令只是打個標記,檔案庫裡的資料庫沒有被更動,所以請記得接著下 hg commit 指令上傳異動.
  • 提交:
    專案往前進到一個段落後,可以通知mercurial 把工作複本中的異動記錄到檔案庫,這個動作,叫做提交(commit).指令如下
    hg commit

    mercurial
    會開啟文字編輯器,你必須輸入此次修改的備忘.然後存檔,關閉文字編輯器.不過,也可以使用較方便的方法,直接在指令列寫明修改的原因,指令如下
    hg commit -m "
    備忘文字"
    這樣mercurial 就不會開啟文字編輯器
  • 查看歷史紀錄:指令如下

    hg log

    mercurial
    會顯示所有從第一次hg commit 以來所有的更動資料.包含了標記,commit 的時間,由誰commit,以及commit 的理由.
  • 查看目前工作副本的狀況:這是用來查看工作副本的檔案的狀況,指令如下

    hg status

    mercurial
    會在檔案的前頭用字母標記來顯示檔案的狀況.ex
    #hg status
    A a.cpp
    M b.cpp
    M c.cpp
    #

    標記字母的意義如下:
    M =
    被修改(相較於檔案庫的相同名稱檔案)
    A =
    新增
    R =
    移除
    ! =
    遺失 (檔案庫仍紀錄這個檔案的存在,可是工作副本中這個檔案已經不見了!!)
  • 比對檔案的差異:指令如下

    hg diff

    mercurial
    會用diff工具顯示目前工作副本跟檔案庫的檔案中修改了哪些地方.如果想察知版本3跟版本4的差異,可以使用

    hg diff -r3:4
  • 程式改壞了,想回復回去:
    指令如下
    hg revert [
    檔名]
    如果程式員修改a.c 這個檔案,改壞了,想回復成檔案庫裡的a.c的內容,可以用
    #hg revert a.c
    a.c
    就會回復成檔案庫裡a.c的內容.當然也可以回復全部的檔案,可以用下面的方法
    #hg revert -all

分支與合併
分支與合併是版本控制最有威力的功能,尤其是在多人參與的大型專案.分支與合併功能更顯得重要.mercurial 提供了相對於集中式版本控制系統更為優越的分支合併功能,以下是常用的分支/合併指令
  • 建立分支:
    要建立分支,指令如下:
    hg branch [
    分支名稱]

    ex.
    #hg branch fixbugNo222
    這樣便完成了新建立分支的功能
    如果指令參數沒有指明分支名稱的話,mercurial 會認為你想知道目前是工作於哪個分支.ex.#hg branch
    fixbugNo222
    #

  • 查看目前所有分支:
    可以查看目前檔案庫裡所有的分支,指令如下:
    hg branches
    ex.#hg branches
    fixbugNo222 1:xxxx
    default 0:xxxx

  • 切換分支:
    知道了目前檔案庫中分支的表列之後,可以隨意的在分支中切換
    指令如下:
    hg update
    分支名稱
    執行了此指令,mercurial 會幫助你把工作複本的內容更改成分支所紀錄的狀態
    ex.
    #hg update default
    1 files
    已更新, 0 files 已合併, 0 files 已移除, 0 files unresolved
    #
    # hg update fixbugNo222
    1 files
    已更新, 0 files 已合併, 0 files 已移除, 0 files unresolved
    #

  • 合併分支:
    合併分支的指令如下:
    hg merge
    分支名稱
    需要瞭解的部份是:當我們說』我要把A分支合併到B分支去』,這樣實際上是把A分支的修改資料送往B分支,合併後A分支的檔案不會被改變,B分支的檔案被改變了.mercurial 的操作邏輯,施行合併作業,必須在下合併指令之前,先切換到B分支去
    #hg update B
    1 files
    已更新, 0 files 已合併, 0 files 已移除, 0 files unresolved
    #

    接著再執行合併指令,合併A分支的修改
    #hg merge A
    0 files
    已更新, 1 files 已合併, 0 files 已移除, 0 files unresolved
    (branch merge, don't forget to commit)
    #

    合併後,目前工作複本以經有A分支的修改資料了,不過這些修改還沒有commit .這是為了讓程式員作最後的驗證動作,如果有衝突,也必須先解決衝突,確認合併作業沒有任何問題,才可以commit.
  • 取消合併:
    如果合併後的資料在還沒有commit 之前,改變心意想要放棄合併,可以用以下指令回復到原本的分支狀況
    hg update -C -r .
衝突(conflict)
只要有兩個人以上共同開發專案,就可能會發生衝突.當兩個成員修改了同一個地方的時候,mercurial不知道該保留誰的版本.mercurial 會提示有conflict,並且在檔案中標示衝突的位置,以便程式員手動移除衝突
  • 列出衝突:
    可以使用以下指令得知這次的merge作業,哪些檔案有衝突
    hg resolve --list

    ex.
    #hg resolve --list
    U A.txt
    U B.txt
    #

    U
    代表 衝突還沒解決
    R
    代表 充除已經解決
  • 將衝突檔案標示成已解決:
    有衝突的檔案經過手動修改衝突的部份後,就可以標記"已解決".指令如下:
    hg resolve -m
    檔案名稱

    ex.
    #hg resolve -m A.txt
    #hg resolve --list
    R A.txt
    U B.txt
    #


與其他成員交流

  • 從另一個地方完整複製一份專案回來:
    除了可以自己建立新的mercurial專案以外,也可以從別的地方把專案複製一份到你的本機
    只要使用以下指令
    hg clone [
    來源位置]
    這樣就會把來源位置的mercurial專案複製一份到目前的目錄.hg clone 並不是只複製檔案庫的檔案,他是複製全部.換句話說,不只取得了檔案,也完全的取得了專案的歷史紀錄,分支,修改過程
    來源位置這個參數支援了檔案路徑,SSH存取,HTTP存取.你可以複製同一顆硬碟裡的mercurial專案,也可以透過SSH複製一份檔案伺服器上的專案,也可以用HTTP取得其他開發團隊開放給全世界的程式碼
    ex.
    #hg clone http://code.google.com/hg/python

    or
    #hg clone ssh://192.168.4.90/project

    or
    #hg clone ../snmpV2/
  • 把自己的修改分享出去:
    可以用以下指令將自己的修改"主動推"給另一個成員
    hg push [
    目的位置]
    目的位置參數一樣的支援普通檔案路徑,SSH存取,HTTP存取

  • 把別人的修改抓回來:
    可以用以下指令將其他成員的修改"主動抓取"回來
    hg pull [
    來源位置]
    來源位置參數一樣的支援普通檔案路徑,SSH存取,HTTP存取

留言

這個網誌中的熱門文章

[C語言]宣告陣列的大小是0 ???

利用net-snmp 的mib2c,由一個MIB檔產出一個可執行的AgentX 程式

ubuntu 16.04開機遇到 flip_done timed out 的問題