2011-03-31 62 views
21

我很喜歡使用git,但最近出於好奇,基於朋友的意見認爲它在某些方面更好,一直在探索Mercurial。最簡單的方法來拆分變更設置在mercurial

然而,我注意到的第一件事情之一是Mercurial似乎沒有像git那樣的索引。我傾向於做出更多改變,然後我應該有時候編輯文件後,我將使用git add -p將補丁拆分爲單獨的提交。如果更改是在不同的文件中,我可以使用MQ,但否則它看起來像我需要先撤消更改。

是否有可能爲Mercurial提供類似索引功能的擴展?

+0

有一個'mercurial'標籤,'hg'自動重定向到那個。不知道你遇到了什麼問題。 – 2011-03-31 14:55:42

+0

也許你的鍵盤上缺少「R」鍵。 :-)我已經更正了所有你的mecurial條目到mercurial。所以,我認爲你也搜索了一個名爲「mecurial」的標籤... – javanna 2011-03-31 15:09:30

+0

謝謝,我在乘坐火車時在我的ipad上創建了這個,所以我似乎很可能在這裏和那裏摸索了幾個鍵。 – 2011-03-31 22:55:14

回答

16

你沒錯,沒有git風格的索引。您可以使用hg record(與Mercurial分銷)或hg crecord。兩者都允許您在提交時根據每個文件或每個大塊選擇。 crecord是一個更復雜,但需要詛咒。

UPDATE(2016年11月19日)

的crecord擴展的功能現在在覈心水銀可用。此外,使用情況更好地整合。提交選定的帥哥的首選方式是

$ hg commit --interactive 

默認情況下此行爲就像老記錄命令。要獲得詛咒基於界面像老crecord命令,在您的HGRC設置此:

[ui] 
interface = curses 
+0

我經常使用'crecord'擴展名,它使得選擇性提交變得輕而易舉。 – 2011-03-31 15:59:32

+0

Matthew,請原諒'commit --interactive'的更新編輯。其實這是打算爲另一個答案。看着它,它仍然是有道理的。所以我會把它留在那裏。隨意刪除它,如果你喜歡你的原始答案。 – 2016-11-19 14:22:29

+0

如果你知道mq,mq也支持qcrecord和qcrefresh的curses接口。 (看起來mq已經被棄用,以支持變更集的演變 - 如前所述,你可以使用commit或crecord--但我不知道這種棄用的發生有多快。) – 2017-04-27 16:28:42

1

你可能有興趣閱讀這篇文章,介紹如何另一善變擴展,補丁隊列,像Git的指數類固醇:

http://stevelosh.com/blog/2010/08/a-git-users-guide-to-mercurial-queues/

+0

對我來說,MQ扮演與git相同的角色rebase -i。該索引僅用於選擇要包含在提交中的文件和塊。如果你想在git中管理補丁隊列,你只需創建一個分支並使用commit而不是qrefresh。 – 2011-03-31 22:50:50

+2

與'git rebase -i'等價的是來自第三方histedit擴展的'hg histedit'。就像在Git中一樣,您可以爲您的實驗工作創建一個分支,可能在其上添加書籤以更好地跟蹤它。然後使用histedit在合併之前摺疊並重新排列變更集。 – 2011-04-01 12:57:36

+0

Mercurial Queues非常靈活,並且非常容易用於模擬git的索引,**和**,以便爲您提供'git rebase -i'或'hg histedit'功能。閱讀我鏈接到的文章,如果你還沒有,並使用mq擴展。在修訂控制工具中,修補程序隊列聽起來像是向後退步,直到我閱讀並試用它們。他們有點令人興奮。 – krupan 2011-04-01 16:15:57

28

有兩種方式來分割變更,這取決於你是否已經提交更改,你要拆分:

,選擇性地從您的工作目錄提交修改(如果你有沒有犯任何變更):

  • 使用hg record。 (這是類似於使用git commit --patch。)

要分割現有的變更(如果你已經提交改變):

  1. 使用hg histedit,並選擇在變更的編輯選項你想編輯。 (與使用git rebase -i類似)

  2. 使用hg record選擇性地將您的更改提交爲單獨的更改集。

  3. 當你完成後使用hg histedit --continue。其餘未提交的更改將包含在最終的變更集中。

正如其他人所說,你可以在hg record位置使用hg crecord

+0

使用'[Mercurial evolve](http://mercurial.selenic.com/wiki/EvolveExtension)',現在也可以執行'hg uncommit'來提取部分提交回工作目錄。 'hg uncommit file/you/want/in/a/separate/commit',然後'hg commit -m newcommit'將很好地分離你的提交。 請記住,「Mercurial evolution」截至2014年仍處於試驗階段。 – Mathiasdm 2014-12-08 09:39:05

+0

完成這3個步驟後,我將小費重新分配給前父母。按照「A - > B」的歷史步驟,最後以'A - > C - > B''結尾,而我要去'B'<- A -> C'。 – 2015-05-27 15:39:35

相關問題