2012-11-29 33 views
11

我是Mercurial的新手,在評估過程中仍然以某種方式,所以這四個概念對我來說有點混亂。有人提到Git的分段/索引概念,或者甚至比Git的分段更好。如何將四個命令hg grafthg recordhg qrecordhg shelve(和hg transplant,但這是Graft vs. Transplant解釋的話)進行相互比較,並隊列概念和dirstate怎麼樣?哪一個用例是另一個用戶選擇的?我知道每個人都有幫助頁面,但是很難弄清楚每個人都會做什麼,因爲一般來說VCS對我來說是一個新話題。Mercurial:移植vs病歷vs.qrecord vs擱置vs移植vsdirstate vs.隊列

+0

嫁接不是概念,並且與分段/索引不相關,記錄距離概念還很遠(概念是*記錄背後的想法*) –

+1

而且您可以將**擱置**添加到「混淆列表」 –

+0

謝謝,我更新了問題以區分「命令」和「概念」,並在列表中添加了兩個。 – Iodnas

回答

17

Mercurial的設計根本不包括暫存區域的概念。也就是說,本地修改和提交之間沒有中間狀態。

這裏是每一個你所提到的概念的概述:

hg graftgit cherry-pick等同。它將一個分支的提交複製到另一個分支。此功能的典型用例是將錯誤修復從一個發佈分支複製到另一個發行分支。該命令替換舊的(現在已過時的)hg transplant擴展名。

hg recordhg qrecord類似於git add --patch。它們允許您交互式地選擇提交的區塊。因此,如果您修改了一個文件的幾個不同區域,您可以選擇您實際要提交的區域(即區塊)以及要作爲本地修改離開的區域。

qrecord僅在您啓用了mq時纔可用。它承諾提供mq補丁,而不是標準提交。

hg shelvegit stash相似。它允許您暫時將本地修改保留在文件(或文件的塊)中。當你準備好時,這些修改可以是unshelved

dirstate是Mercurial源代碼的內部類。它不會暴露給用戶。

Mercurial Queues(也被稱爲mq)可能是最接近Mercurial中的臨時區域。以下是來自Mercurial wiki的描述:

更改將作爲提交到Mercurial的補丁進行維護。 提交可以被刪除或重新排序,並且可以根據工作目錄中所做的更改刷新基礎修補程序 。修補程序控制還可以將修補程序 目錄置於修訂控制之下,因此可以對修補程序進行更改的單獨歷史記錄。

mq通常用於擦亮/返工您正在本地測試但未推送到公共位置的提交。有些人也使用它來維護對第三方代碼的一系列修改。

+1

這已經非常有幫助。我添加了'qrecord'和'shelve'到列表中...... – Iodnas

+0

看起來'shelve'是一個增強的'record'命令。 – Iodnas

+0

@lodnas:我更新了包括'移植','shelve'和'qrecord'的答案。 –