2011-03-31 42 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

相关问题