我在评估过程中新的Mercurial,仍然不知何故,所以这四个概念样的困惑我。 有些人提到的是一个等同于Git的分期/指数的概念,或有的甚至比Git的分期一个更好的。
如何做好四个命令hg graft
, hg record
, hg qrecord
和hg shelve
(和hg transplant
,但是这是在解释移植物抗移植的话)进行相互比较,以及队列和dirstate的概念,怎么样? 在该用例是一个choosen比其他?
我知道有为每一个帮助页面,但它仍然是很难弄清楚每个人所做的一般VCS对我来说是一个新课题。
水银的设计根本不包括临时区域的概念。 即,存在局部修改和提交之间没有中间状态。
这是每一个你所提到的概念的概述:
hg graft
是相当于git cherry-pick
。 它的副本提交从一个分支到另一个。 一个典型应用此功能是从一个发布分支复制bug修复到另一个。 此命令替换了旧的(现在已过时) hg transplant
扩展。
hg record
和hg qrecord
类似于git add --patch
。 它们允许您以交互方式选择提交帅哥。 所以,如果你修改一个文件的几个不同的领域,你可以选择哪些区域(即帅哥),你居然要提交,哪些是你要离开本地修改。
qrecord
仅当您已mq
启用。 它承诺的mq
补丁,而不是一个标准的承诺。
hg shelve
类似于git stash
。 它可以让你暂时抛开局部修改的文件(或文件的帅哥)。 那么这些改变可以是unshelved
当你为他们准备好。
dirstate
是一个内部类的水银源代码的。 它不暴露给用户。
Mercurial Queues
(也称为mq
)很可能你会得到在水银的临时区域最接近。 下面是从水银的wiki的描述:
变化保持作为致力于为水银补丁。 承诺可以被删除或重新排序,和底层的补丁可以基于工作目录所做的更改被刷新。 这个补丁目录,也可以放在版本控制之下,所以你可以有你的补丁所做的更改单独的历史。
mq
经常被用来抛光/返工承诺,你是在本地测试,但还没有推送到公共场所。 有些人还用它来维护一组修改的第三方代码。
文章来源: Mercurial: graft vs. record vs. qrecord vs. shelve vs. transplant vs. dirstate vs. queue