什么是git staging以及为什么Hg *表面上*不支持它?

时间:2014-02-06 16:49:50

标签: git mercurial tortoisehg staging

Hg docs状态hg不支持开箱即用的git索引,并建议使用扩展(记录或mq)来表示类似的行为。

首先,我对git的实地经验很少,所以让我说明我对git中升级概念的理解:

  • 有工作副本,包含许多已更改的文件,每个文件都有许多已更改的块。
  • 然后用户(可能反复)使用git add来选择要提交的文件。
  • 或者,使用git add -p仅选择文件中的某些块以便稍后提交。
  • 执行git commit将以前选择的更改添加到存储库。

因此,对我而言,整个staging area是一个浮夸的名称,用于选择工作副本中的哪些更改将在下次提交时进行。

如果我还没完全关闭,那么,为什么每个人,包括官方文档,都说Mercurial不支持这个?

我问,因为上面的确切工作流程在TortoiseHg中是琐碎的

enter image description here

    左侧窗格中的
  • - 选择要包含在提交中的整个文件
  • 右下方窗格中的
  • - 选择要包含的单个块
  • 点击'提交'。

我不知道TortoiseHg使用的hg命令是什么,但是再一次,我从不需要关心。 (它没有使用此AFAICT的任何扩展名)

git暂存的概念还有更多我错过了吗?

2 个答案:

答案 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手柄,双手柄   锅炉咖啡机 - 当他们所需要的只是即时。