Mercurial使用簡單介紹

來源:互聯網
上載者:User
文章目錄
  • 概述
概述
  •       Mercurial可以使異地開發進行統一的版本管理,比如一個項目有一部分人在銀行內部開發無法用外網,另一部分人在公司開發,這兩部分人需要一個統一的版本管理工具,mercurial這時候可以發揮作用
  •       mercurial 同Subversion很多命令相同,所以學習曲線不陡峭,可以比較快的掌握使用。add,commit,branch,tag等命令都是相似的操作方 式。mercurial也是管理一個全域的版本號碼,同時每個版本號碼有一個唯一的ID識別,版本號碼只是順序號,不同版本庫的相同的版本號碼並沒有可比較的意 義,版本ID相同才說明這個版本是相同的
  •       mercurial對linux,windows,mac平台都有比較好的支援。在windows平台上有基於命令列的mercurial.exe和基於圖形介面的TortoiseHg
  •       DVCS同集中式版本管理的最大不同點是,每個人機器上都有一個版本庫,一個版本庫如同一個svn branch,所以如何使用branch,並進行合理的合并,同其他人的版本合并也變得異常重要,不然會形成非常的heads,將會形成混亂。
  •       mercurial通過匯出changeset到檔案中,可以方便的通過郵件附件的形式來發送到另外一個項目群組成員,繼而進行匯入,從而實現版本同步
  •       在當前最火的兩個DVCS中,Google code選擇了Mercurial,但Git有它的一些優勢,比如版本庫儲存、多個parents方便merge
基本使用

以下使用大多基於命令列形式,版本是1.2.11

  • 因為本地即是版本庫的服務端也是版本庫的用戶端,所以首先得區分好版本庫和工作目錄兩個概念,版本庫存放了所有的版本,工作目錄只是某個特定的版本,這個概念同svn是一致的,只是svn的版本庫不在本地,而在集中的一台伺服器上。
  • hg init 建立新倉庫,版本庫的檔案放在一個.hg的檔案夾下面
  • hg add 添加未版本化的檔案
  • hg commit 提交修改,使用-m 填寫comments,同svn是一樣的
  • hg tip 查看目前的版本庫的最新版本,注意:不是當前工作目錄的最新版本。tip是版本庫最新版本的意思
  • hg parents 查看當前工作目錄的最新版本,如果這個版本有多個parent,會顯示出來,如果沒有則不顯示。parent是指某個版本的前一個版本,如果某個版本通過 兩個版本merge而來,則會出現多個parents。mercurial還不支援超過兩個的parents,也就是說只能將版本兩個兩個的合并,合并3 個版本需要操作2次,合并4個版本需要操作3次,依次類推,如果碰到8個版本需要合并,則需要合并7次...
  • hg clone 複製一個版本庫到本地,當項目開始的時候,建議在一台電腦上init項目後,然後大家從他那clone出來,而不是各自init。
  • hg pull 從另一個版本庫更新版本到本地
  • hg push 將本地版本庫更新到其他版本庫中,其他版本庫需要開通ssh服務,Windows下需要cygwin來啟動ssh,linux下用openssh實現。Windows用戶端串連ssh伺服器時,需要在mercurial.ini的ui段配置,如下
    [ui]
    ssh = "C:\Program Files\TortoiseHg\TortoisePlink.exe"


    putty.exe 無法配合hg使用。
    TortoisePlink.exe對於 ssh://xx/ 之後的路徑需要再加一個"/" 以示根路徑,如下:
    ssh://192.168.107.129//home/arthur/hg/hello

  • hg incoming 將本地版本庫同其他版本庫進行比較,看看有哪些changeset在其他版本庫中可以pull過來
  • hg outgoing 將本地版本庫同其他版本庫進行比較,看看有哪些changeset可以push到其他版本庫中
  • hg update 更新工作目錄,預設參數是tip,參數也可以是版本號碼、tag名字、branch名字。svn中的切換branch/tag通過這個命令來實現
  • hg tag 制定一個永久的版本號碼,tag存放在.hgtags檔案中,這個檔案也需要版本化
  • hg branch 顯示當前branch,或者建立一個branch,預設的branch名字是default。
  • hg diff 對比版本間的差異
  • hg merge 合并版本到當前工作目錄,hg pull之後會提示hg update,hg update之後如果提示hg merge,這時候的merge是在最新版本的基礎上進行的merge,merge之後所作的修改需要通過commit來產生新的版本號碼。
    • 合并branch : hg merge branchname ,先確認hg branch是什麼再執行這個命令。
      當一個branch的曆史使命完成的時候,這時候需要決定是基於這個branch新開一個branch,還是在某個之前的版本開立branch. default是一個沒有創立任何branch時的預設branch名字。
      如果希望繼續工作在default branch下,則需要先hg update default,然後再考慮需要合并哪些版本到default裡面,之後就可以在default下一直工作了。
      對於開了多個branch需要合并到default時,需要一個個branch來合并,諸如這樣:

      hg merge foo
      hg merge bar
      hg ci -m "merge foo and bar to default

      "


    • 在windows下,如果安裝了beyond compare,會自動被調用出來。
      顯示三個視窗:本地檔案、基檔案((在分支分開前的最後一個版本))、其他檔案(外來的檔案)。這種合并模式同svn是一樣的。
      merge做完之後,需要hg ci提交修改,這時可以看到tip 資訊中的parent有兩個,表明是從兩個版本中merge過來的。
      beyond compare對於衝突有三個基本選項:Take left, take center, take right,分別對應以上三個檔案的內容。還有其他幾個選項也很容易明白。有衝突時還可能需要手工輸入內容。
      另外,如果我們沒有安裝圖形合并程式, 我們就會開啟文字編輯器來訪問需要合并的檔案。用手工來做這些事情是非常容易出錯並且繁瑣的。 最好是退出編輯器並用hg rollback指令來清除["Pull"]帶來的改變,然後安裝合并程式,再做一次。
  • hg heads head指的是沒有兒子chaneset的changeset,也就是版本樹的葉子節點,多個葉子節點可以進行合并為一個葉子, branch heads指那些給了tag但還沒有兒子changeset的changeset。 用hg heads顯示當前庫所有的heads , 如果存在多個heads則說明有多條並行開發的路徑,這時需要考慮是否需要合并。
  • hg serve -n "hellohg" -p 80 運行網路服務。之後可以通過hg pull http://localhost/hellohg 來下載這個版本庫。這是一個臨時性的便捷的提供pull版本庫服務的方法
  • hg export 匯出changeset,預設匯出tip,需要用重新導向來匯出到檔案中,之後這個檔案可以通過郵件附件發出,這樣可以實現無網路連接狀態下的版本同步
  • hg import 匯入changeset

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.