分散式版本控制工具 Mercurial 使用

pyoracle發表於2011-05-09

瀏覽倉庫歷史:log

<wbr> <wbr> <wbr> 這些輸出行的含義是這樣的。

  • 每一段描述一個特定的改變集。一個或幾個檔案的改變集合在一起形成一個邏輯單元,稱為改變集。
    • 在上面的例子中,我們可以看到該倉庫 的歷史包括了兩個改變集

  • changeset 標識了一個 改變集.

    • 冒號前面的數字代表版本號; 它是一種標識改變集的本地縮寫.只是在你的本地倉庫中這個版本號才有意義.

    • 冒號後面的那個很長的十六進位制串是 ChangeSetID; 它是標識改變集的全域性唯一識別符號, 在所有包含這個改變集倉庫中都相同. 如果你正在和其他人討論某個改變集,請使用這個 ChangeSetID,而不是上面說的版本號.

  • tag 是一個標籤,可以理解成為一個改變集指定的名字.

    • 你可以給任何改變集指定一個或者多個標籤. 實際上, 許多改變集都是沒有標籤的, 所以tag這一行很多時候都不存在.

    • 名叫tip 的特殊標籤總是表示,它是倉庫中最後一個改變集。 如果你建立另外的改變集(一會我們會看到),那麼它將會變成 Tip

  • user 確定了誰建立了本改變集。這是一個無格式的字串; 它通常包括電子郵件地址,個人姓名等。

  • date 描述了改變集是什麼時候建立的。這些時間是建立改變集的人所在區域的當地時間。

  • summary 給出了改變集描述的首行。它是在建立改變集時進入的,它可以幫助建立者和其它人瞭解改變集的目的。

  • parent 標誌了改變集的父輩,當你從幾個倉庫合併而來的情況下,父輩有多個。

    • 大多數情況只有一個父輩,它比目前的改變集舊。這是在我們例子中使用的。

我們可以透過指定-v診斷輸出選項來獲得更多更詳細的歷史資訊, 或者指定--debug選項來獲得歷史資訊中的一切細節:

<wbr> <wbr> <wbr> log -v <wbr> <wbr>

<wbr> <wbr> <wbr> --v的輸出比預設輸出要多。

  • changeset 給出不縮略的改變集標號

  • files 列出在本改變集中檔案的改變。

  • description 包含了改變集的完整多行描述而不僅是頭一行。 <wbr> <wbr>

<wbr> <wbr> <wbr> <wbr>log <wbr> --debug

<wbr> <wbr> <wbr> --debug 給謂詞輸出新增了以下方面:

  • file+ 列出了在此改變集中增加的檔案。

  • file- 列出了在此改變集中刪除的檔案。

  • manifest 給這個改變集一個 Manifest 號。

  • 兩個 parent 域給這個改變集的兩個父輩號碼,1:000000000000000000000000<wbr>0000000000000000 表示沒有父改變集。

<wbr> <wbr> log 命令與 -r 選項一起使用可以檢視特定改變集。

<wbr> <wbr> log 命令與 -p 選項一起可以顯示和此改變集相關聯的補丁。

<wbr> <wbr>log <wbr>-r <wbr>tip 來顯示 tip 的資訊,如最後的改變集。

提交更集:commit

<wbr> <wbr> 建立一個變更集的動作稱為提交它。我們用commit命令來執行提交

<wbr> <wbr> 萬一我們希望放棄我們的變更並重新開始,我們可以用revert命令來恢復到我們沒有更改的狀態。

與別的倉庫分享改變:

<wbr> <wbr> <wbr> 我們用 pull 命令,這個命令所有在別的倉庫中有而在本倉庫中沒沒有的 ChangeSet 從別的倉庫 Pull 到本倉庫。

<wbr> <wbr> <wbr> 不像其它普通的 Mercurial 命令,pull 有點羅嗦。在這點上 Pull 是成功的。

<wbr> <wbr> <wbr> 最近一行輸出是重要的。在 Pull 後,預設情況下 Mercurial 不更新工作目錄。這意味著雖然Repository 現在有變更集, 但在工作目錄中的 hello.c 檔案仍然是Pull 之前老的內容。我們可以用以下Mercurial的提醒來 Update 這個檔案 (也包括所有其它 Pull 時改變的檔案)。

<wbr>

和別人分享改變:

<wbr> <wbr> <wbr> <wbr> 我們提交(Commit)改變後, 我們可以匯出(Export) 它到一個檔案裡,並把這個檔案作為附件 email 給其它人。我們用 export 命令來 匯出(Export) 改變。我們必需提供一個 Tag, 版本號變更集號 來告訴 Mercurial 有什麼進入了 匯出(Export)

<wbr> <wbr> <wbr> <wbr> 預設情況下,匯出(Export)只顯示補丁,所以我們通常把輸出重定向到一個檔案中。這個檔案是一個 UnifiedDiff 格式的補丁檔案,這個檔案還帶了一些擴充套件的資訊告訴 Mercurial 如何 匯入(Import) 它.

當收件人收到我們的郵件,他們將儲存附件並使用 import 命令來把變更集匯入(Import)到他們的倉庫中去。 (在0.7版本中, Mercurial 忽略了其中的一些資訊,做匯入(import)會引起一合併的問題。)

合併改變:merge

<wbr> <wbr> <wbr> 首先, <wbr> 我們再次 Clone 倉庫,我們必須建立合併的目標,然後 Commit 我們的變更. 這次, 我們在commit命令中使用-m 選項來節省時間, 以免我們又要進入編輯器。

合併有衝突的改變:

<wbr> <wbr> <wbr> 很平常的情況是兩個人同時更改同一個檔案的同一段程式碼,然後必須給出處理的方法。這稱之為衝突;處理這類衝突稱之為合併。

<wbr> <wbr> <wbr> Mercurial 使用了三路合併。 這就意味著有三個檔案來做合併,分別是:

  • 本地檔案(當前倉庫)
  • 其它檔案(正在被合併的倉庫)
  • 基檔案 (在分支分開前的最後一個版本)

<wbr> <wbr> 另外,如果我們沒有安裝圖形合併程式, 我們就會開啟文字編輯器來訪問需要合併的檔案。用手工來做這些事情是非常容易出錯並且繁瑣的。 最好是退出編輯器並用hg <wbr>rollback指令來清除["Pull"]帶來的改變,然後安裝合併程式,再做一次。

[@more@]1,hg version 檢視版本狀態
2,配置使用者名稱
UNIX     .hgrc  in your home directory
WINDOWS   %USERPROFILE%Mercurial.ini 
[ui]
username = John Doe
3,建立庫[.hg]
hg init
4,克隆庫[.hg]
hg clone my-hello
hg parents
5,新增檔案
hg add *
6,形成一個版本
hg commit -m "adding initial version of hello.txt"
7,差異
hg diff
diff -r 82e55d328c8c hello.c
8,恢復
hg revert hello.c
==>
rm hello.c
mv hello.c.orig hello.c
hg st -> M hello.c
9,歷史檢視[changeset]
所有歷史:      hg log
所有詳細歷史檢視:  hg log -v
針對版本的檢視:   hg log -r1
針對版本的檢視和pathes: hg log -r1 -p
最新的版本:  hg log -r tip
10,共享變更
檢視不同的changeset    hg -q tip
從新庫帶來變更    hg pull 新庫位置
(run 'hg update' to get a working copy)
$ hg pull ../my-hello-new-output
$ hg push ../my-hello-new-output
If both of these give a 'no changes found', that means the repositories are identical.
從新庫帶來變更    hg pull 新庫位置
(run 'hg heads' to see heads, 'hg merge' to merge)
hg heads
hg glog
hg update
abort: crosses branches (use 'hg merge' or 'hg update -C')
hg merge
merging hello.c
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
hg commit -m "Merged changes from my-hello-new-output"
hg annotate hello.c
use the annotate command to show changeset information per file line
hg resolve -m hello.c

11,把變更共享給他人
hg export tip [export just displays the patch, so usually we redirect the output to a file (or use option -o).]
This file is a patch file in unified diff format, with some extra information that tells Mercurial how to import it.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25556693/viewspace-1049634/,如需轉載,請註明出處,否則將追究法律責任。

相關文章