Hg docs状态hg
不支持开箱即用的git索引,并建议使用扩展(记录或mq)来表示类似的行为。
首先,我对git
的实地经验很少,所以让我说明我对git中升级概念的理解:
git add
来选择要提交的文件。 git add -p
仅选择文件中的某些块以便稍后提交。git commit
将以前选择的更改添加到存储库。因此,对我而言,整个staging area
是一个浮夸的名称,用于选择工作副本中的哪些更改将在下次提交时进行。
如果我还没完全关闭,那么,为什么每个人,包括官方文档,都说Mercurial不支持这个?
我问,因为上面的确切工作流程在TortoiseHg中是琐碎的:
我不知道TortoiseHg使用的hg
命令是什么,但是再一次,我从不需要关心。 (它没有使用此AFAICT的任何扩展名)
git
暂存的概念还有更多我错过了吗?
答案 0 :(得分:30)
暂存区域(索引)记录更改快照,而不仅仅是选择的文件。例如,您可以修改文件A以添加foo
,暂存文件A,然后再次修改文件A以添加bar
。如果您不重新暂存文件A,那么当您提交时,仅 foo
将被提交,因为索引在暂存时具有A的快照。
您还可以将文件还原为最后一个索引快照的状态(通过git checkout
)。从本质上讲,索引就像一个“临时提交”,在实际提升为完全提交之前很容易修改。
由于索引是持久性的,如果你在中途进行中途,那么决定你需要进行另一次更改,没问题 - 只需进行更改,然后暂存新版本。无需重新安排你已经上演过的所有其他事情。
在提交前意外删除文件?如果你已经上演了它,不用担心 - 只需查看分阶段版本。
答案 1 :(得分:5)
Git旨在支持Linux内核开发期间的某种工作流程。对某些人来说,某种人。
它的设计并非易于普通开发人员使用(与hg
比较!),但由于其成本,性能,大型公司支持和广告活动(GitHub,这里)而获得了大众化和文化地位。
今天,普通开发人员通过IDE GUI与Git交互,并且不需要了解索引/舞台区域。它只使用了问题屏幕截图中的复选框(因此普通开发人员的Git / Mercurial用法没有区别)。
对于使用Git的命令行不规则CLI语法并暴露不必要的存储格式细节的人来说,与成为Mercurial向导的时间相比,学习线会更长。
以下是描述索引用法的精彩图片:
你总是可以模仿索引(但为什么?):
hg qinit
hg qadd
hg qrefesh
hg qfinish
除了MQ允许你有一组有序的索引,而不只是一个!并允许您为每个"索引"。
命名使用record
扩展名,您可以选择在CLI中选择修补程序块,就像检查GUI中的复选框一样。该扩展名是Git -p
选项的直接答案。
所以主题启动程序实际上正确地说它是索引是DVCS架构不必要的功能,并内置到Git中以支持一些Git核心开发人员的意愿。
祝你好运和快乐的黑客攻击!
更新 http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/
的报价Git的大部分功能都直接针对代码库的维护者: 必须合并来自众多不同的贡献的人 来源,或谁必须确保一些并行的开发工作 产生单一,连贯,稳定的释放。这很好。但是 大多数Git用户都不在这种情况下:他们只是编写代码, 通常在一个分支上一次持续数月。 Git是4手柄,双手柄 锅炉咖啡机 - 当他们所需要的只是即时。