我是Mercurial的新手,在评估过程中仍然不知何故,所以这四个概念对我来说有点混乱。有人被提到相当于Git的分期/索引概念,或者甚至比Git的Staging更好。
四个命令hg graft
,hg record
,hg qrecord
和hg shelve
(以及hg transplant
如何处理,但Graft vs. Transplant已对此进行了解释)相互比较,队列和 dirstate 的概念如何?在哪个用例中选择一个用户?
我知道每个都有帮助页面,但是仍然很难弄清楚每个人的作用,因为VCS对我来说是一个新主题。
答案 0 :(得分:17)
Mercurial的设计根本不包括临时区域的概念。也就是说,本地修改和提交之间没有中间状态。
以下是您提到的每个概念的概述:
hg graft
相当于git cherry-pick
。它将提交从一个分支复制到另一个分支。此功能的典型用例是将错误修复从一个发布分支复制到另一个发布分支。此命令替换旧的(现在已过时)hg transplant
扩展名。
hg record
和hg qrecord
与git add --patch
类似。它们允许您以交互方式选择帅哥进行提交。因此,如果您修改了一个文件的几个不同区域,您可以选择您实际想要提交的区域(即帅哥)以及您希望将其保留为本地修改的区域。
qrecord
仅在您启用mq
时可用。它提交mq
补丁而不是标准提交。
hg shelve
与git stash
类似。它允许您暂时保留对文件(或文件的深刻)的本地修改。当你准备好它们时,这些修改可以是unshelved
。
dirstate
是Mercurial源代码的内部类。它不会向用户公开。
Mercurial Queues
(也称为mq
)可能是您到Mercurial的临时区域最近的地方。以下是Mercurial wiki的描述:
更改将作为已提交到Mercurial的修补程序进行维护。 提交可以被删除或重新排序,底层补丁可以 根据工作目录中所做的更改进行刷新。补丁 目录也可以置于修订控制之下,因此你可以拥有一个 单独更改修补程序的历史记录。
mq
通常用于修改/返工您在本地测试的提交,但尚未推送到公共场所。有些人还使用它来维护对第三方代码的一组修改。