git中的“ stage”是什么意思?


315

我发现git很难理解,因为我找不到用于操作的单词的含义。我已经检查了字典中“ stage”的含义,但这些含义均与源代码管理概念无关。

在git的上下文中,“ stage”是什么意思?



11
Git确实有自己的词汇量。而且由于每条指令都是用特殊的词汇表述的,所以很难上手。“阶段化”是git add file.ext针对特定文件执行的操作,或git add .影响所有已修改和未跟踪的文件。以这种方式添加的文件被称为“暂存”,它们将包含在下一个“提交”中。提交是您使用创建的工作的快照git commit -m "I wrote something"
JonatanÖström'16

11
Git很难理解,因为那里没有概念性教程。所有这些都会经历不必要的细节。
Xaqron

2
您是要删除此问题中的“术语”标签吗?在我看来,这是一个完全有效的标签。
菲利普·肯德尔

出于某种原因,我能理解分期的重要性的最佳方法是Quora中的答案:qr.ae/TbSK2I
Lamar

Answers:


310

上演一个文件就是精细准备它提交。Git及其索引允许您仅提交自上次提交以来所做更改的某些部分。假设您正在使用两个功能-一个已经完成,一个仍然需要完成一些工作。您想提交并回家(终于5点了!),但不想提交第二项功能的各个部分,但尚未完成。您上演您知道属于第一个特征的零件并提交。现在,您的提交是完成第一个功能的项目,而第二个功能仍在您的工作目录中进行中。


5
很好的解释。请注意,由于分发是本地的(最初),因此分发的git显然可以使您同时提交这两个功能。尽管如此,您可能仍希望将每个功能的修改拆分成一个提交,然后再进行一次临时派上用场。
sleske 2011年

77
我不明白您为什么要为此分阶段进行。我可以通过仅提交相关文件来使用HG甚至是SVN。感觉像是此功能主要是为了帮助那些坚持使用命令行的人而设计,因为在命令行中很难选中要提交的内容。
jiggy 2012年

78
@jiggy git允许您暂存文件的一部分。您还可以暂存文件,进行进一步修改,然后提交暂存文件的状态。您无法在Subversion中做到这一点。
Izkata 2014年

4
@jiggy在SVN中,从您选择要提交的文件/部分到完成写提交消息之间的这段时间,会记录您选择提交的文件/部分。可能永远不会明确提到它,它可能在SVN客户端中实现,而不是在存储库的实际部分中实现,它可能只是内存中的一些标志,但这就是SVN的阶段。我没有看过HG,但我怀疑它会做同样的事情。git与git的区别在于git承认它是一个事物,将其记录到磁盘上,并允许用户直接访问它。
2014年

7
图中的第二个箭头“阶段文件”可能会引起误解。“大块头”可能更准确吗?
艾达

137

既然到目前为止,每个人都以“正式”的方式回答了问题,所以让我用替代方法来做到这一点,以借助隐喻的力量来增强学习。

因此暂存区域如下:

  • 您要提交的文件的缓存
  • 不是一系列的管子,而是实际上是一辆自卸车,准备将装载的工作移到存储库中
  • 一个神奇的地方,您可以使用向导将选定的文件变成石头,并可以随时随地神奇地将其传输到存储库
  • 使文件愉快地进入存储库的黄砖路(如果要还原,则掉落)
  • 在海港的虚构地方,那里收到一双水泥鞋,然后扔进仓库
  • 在图书馆的接待台,您将文件放在那里,以便馆员准备归档到图书馆
  • 一个盒子,您可以在将东西推入床下之前放入其中,那里的床是您以前推入其中的盒子的存储库
  • 在使用电源加载器将文件放入存储库仓库之前将文件加载到托架中
  • 电动滴滤咖啡机的过滤器,如果锉像咖啡粉,则提交的锉是冲泡的咖啡
  • 在库房旁边的Scrooge McDuck的办公室里,文件像硬币一样进入他们庞大的Money Bin的库房
  • 宠物商店,一旦将宠物带回家

它的神奇


喜欢类比;发芽的方式^ _ ^
Musa Al-hassy

喜欢最后的比喻。
meTchaikovsky

35

分阶段是git提交过程之前的一步。也就是说,在git中的提交要分两个步骤进行:暂存和实际提交。

只要变更集位于登台区域中,git便允许您根据需要对其进行编辑(将登台文件替换为其他版本的登台文件,从登台中删除更改等)。

隐喻时间:

考虑一个场景,您打电话给搬家公司,将您的东西从旧公寓搬到新公寓。在执行此操作之前,您将仔细检查自己的东西,决定随身携带的物品和扔掉的物品,将其包装在袋子中,然后留在主走廊中。搬运工只需走过来,从走廊拿走(已经包装好的)袋子并运输它们。在此示例中,直到搬运工拿到东西之前,一切都处于分阶段:您决定去哪里,如何包装等等(例如,您可以确定一半的东西在搬运工到达之前就被扔掉了-这是一部分分期)。

从技术角度来看,登台还通过将所有操作划分为可能失败(登台)和不能失败(提交)的操作来支持事务提交:

在阶段成功完成之后,以事务方式实现git中的提交。登台中的几个步骤可能会失败(例如,您需要提交,但您的HDD已满99.9999%,并且git没有空间来执行提交)。这将导致暂存失败(您的存储库不会被部分提交损坏),并且暂存过程不会影响您的提交历史记录(在发生错误的情况下,它不会损坏您的存储库)。


……到目前为止,票数很少。
ojonugwa ochalifu

26

暂存文件就是为提交做准备。由于git将此操作公开给用户控件,因此它允许您创建部分提交,或修改文件,暂存,再次修改文件,并且仅提交或还原为原始修改。

分段使您可以更好地控制要如何进行版本控制。


19

除了其他出色的答案外,“ stage”的名称来自以下位置:

我检查了字典中舞台的含义,但这些含义均与源代码管理概念无关。

用英语来说,“登台”可能意味着

组织和参加(一个公共活动):UDF支持者在索非亚举行了示威游行

(来自http://oxforddictionaries.com/definition/stage

git功能的名称“ staging”源于此含义:在进行分阶段时,您正在准备和组织提交。当然,提交与性能并不太相同,但这在VCS中重要的事件:-)。


3
我本来以为它与登台文章中
没用2014年

同上。另外,“过程或开发中的一点,时期或步骤”。
达里安

另外,“登台服务器”是一个非常通用的术语,用于描述介于开发和生产之间的服务器。
Eternal21'5

4

在大多数其他版本控制系统中,有2个存储数据的地方:您的工作副本(当前正在使用的文件夹/文件)和数据存储(版本控制决定如何打包和存储更改的位置)。在Git中,还有第三个选项:临时区域(或索引)。从本质上讲,这是一个装载平台,您可以在其中确定将哪些更改运出。

来源:http : //gitready.com/beginner/2009/01/18/the-staging-area.html


1
这似乎并没有增加任何实质性的对现有6个回答
蚊蚋

它提到索引。并引用了一篇非常详尽的文章。正在投票。顺便说一句,上面的一些答案仅仅是个笑话。
Gangnus

1

“阶段”是检入文件(即收集要添加到存储库中的更改)过程中的技术上必需的中间步骤。Git的作者选择使此步骤可见且持久,而其他VCS使其成为提交过程的过渡部分。所以这只是git给您的选择,因为它可以,为什么不呢?

我的看法是,git“ stage”给您的主要信息是其他VCS没有,您可以使用它来检查文件。实际上,这是一个未命名,未注释的本地提交,它为您完成所有工作并将其永久提交到存储库与根本不保存任何本地存储之间提供了一个中间步骤。

例如,假设您有一个功能已部分完成。它处于稳定状态,通过了所有测试,可以投入生产,但是您需要做更多的工作。您可以进行所有更改,然后继续使用该功能。

稍后,您可以选择仅提交已暂存的内容(并将该提交推送到远程存储库),或将新更改添加到暂存区域,然后一次全部提交,或仅撤消新更改并将您的工作目录恢复到上级更改时的状态。

实际上,完全可以完全跳过过渡区域-agit commit如果您没有发现过渡区域有帮助的概念,则可以使用该选项。很多人跳过了暂存,GUI工具通常也允许这样做。


“其他VCS不这样做” -您怎么这么认为?Perforce的货架似乎正在按照您的描述进行,甚至没有其他额外的花哨
gna 2014年

1
@gnat是的,当然许多其他VCS也会为您提供分期的功能。“其他VCS”是指其他不具有git's stage之类的VCS,因为这是OP所指的。
老临

我发现这个答案比上述所有答案都好得多,因为这是唯一一个可以阐明为什么分期存在的原因(从技术上来说是必需的),并解释了它的由来(Git的作者选择使这一步骤可见且持久),并补充说。我个人认为这是一个很好的定义(中间的,未命名的,未注释的本地提交)。但是,我认为可以通过引用有关暂存源的声明的来源并详细说明为何在技术上需要它来进行改进。@OldPro
alexlomba87

-1

我的理解是,假设我正在开发登录功能,并且需要完成5个连续步骤。因此,这里的暂存将帮助您像
执行第1 步一样完成该步骤。
完成第2步后,现在第1步和第2步都是正确的阶段。
弄乱了步骤3没问题,结帐了最新的上一步步骤,即
完成所有5个步骤后,步骤2 同样,这意味着功能已完成,现在执行提交。


在先前的9个答案中所提出和解释的观点上,这似乎并没有增加任何实质性内容
gna

是的,您是对的,我只是想让解释变得简单而甜蜜
palash140 '16

我实际上想使用这个概念的原因是我试图解释一下
palash140 '16

考虑在此处进行讨论:第二个TL; DR答案是否可以接受?(与以前的答案相比,FWIW这对我来说看起来并不简单也不甜)
gna

谢谢您,先生,我有一个问题要问。我遇到了很多答案,其中大多数答案太复杂了,是的,这些答案正确但难以一次消化,我相信如果您无法以简单的方式解释任何内容,那么您就不会正确学习或不知道如何使用它。所以现在总结或简单的回答方式是不好的吗?
palash140 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.