Mercurial:移植与记录对比qrecord与搁置与移植与dirstate与队列

时间:2012-11-29 17:23:25

标签: mercurial shelving

我是Mercurial的新手,在评估过程中仍然不知何故,所以这四个概念对我来说有点混乱。有人被提到相当于Git的分期/索引概念,或者甚至比Git的Staging更好。

四个命令hg grafthg recordhg qrecordhg shelve(以及hg transplant如何处理,但Graft vs. Transplant已对此进行了解释)相互比较,队列 dirstate 的概念如何?在哪个用例中选择一个用户?

我知道每个都有帮助页面,但是仍然很难弄清楚每个人的作用,因为VCS对我来说是一个新主题。

1 个答案:

答案 0 :(得分:17)

Mercurial的设计根本不包括临时区域的概念。也就是说,本地修改和提交之间没有中间状态。

以下是您提到的每个概念的概述:

hg graft相当于git cherry-pick。它将提交从一个分支复制到另一个分支。此功能的典型用例是将错误修复从一个发布分支复制到另一个发布分支。此命令替换旧的(现在已过时)hg transplant扩展名。

hg recordhg qrecordgit add --patch类似。它们允许您以交互方式选择帅哥进行提交。因此,如果您修改了一个文件的几个不同区域,您可以选择您实际想要提交的区域(即帅哥)以及您希望将其保留为本地修改的区域。

qrecord仅在您启用mq时可用。它提交mq补丁而不是标准提交。

hg shelvegit stash类似。它允许您暂时保留对文件(或文件的深刻)的本地修改。当你准备好它们时,这些修改可以是unshelved

dirstate是Mercurial源代码的内部类。它不会向用户公开。

Mercurial Queues(也称为mq)可能是您到Mercurial的临时区域最近的地方。以下是Mercurial wiki的描述:

  

更改将作为已提交到Mercurial的修补程序进行维护。   提交可以被删除或重新排序,底层补丁可以   根据工作目录中所做的更改进行刷新。补丁   目录也可以置于修订控制之下,因此你可以拥有一个   单独更改修补程序的历史记录。

mq通常用于修改/返工您在本地测试的提交,但尚未推送到公共场所。有些人还使用它来维护对第三方代码的一组修改。