#1 楼
暂存文件只是为提交做好准备。 Git及其索引允许您仅提交自上次提交以来所做更改的某些部分。假设您正在使用两个功能-一个已经完成,而一个仍然需要完成一些工作。您想提交并回家(终于5点了!),但不想提交第二项功能的各个部分,但尚未完成。您上演您知道属于第一个特征的零件并提交。现在,您的提交就是完成第一个功能的项目,而第二个功能仍在您的工作目录中进行中。评论
很好的解释。请注意,由于分发是本地的(最初),因此分发的git显然可以使您同时提交这两个功能。尽管如此,您可能仍希望将每个功能的修改拆分成一个提交,然后再进行一次临时派上用场。
–sleske
2011年11月15日在9:08
我不明白为什么您需要为此做些准备。我可以通过仅提交相关文件来使用HG甚至是SVN。感觉这个功能主要是为了帮助那些坚持使用命令行的人提供帮助,因为很难在命令行中选中要提交的内容。
–吉吉
2012-09-19 17:55
@jiggy git允许您暂存文件的一部分。您还可以暂存文件,进行进一步的修改,然后提交暂存文件的状态。您无法在Subversion中做到这一点。
–伊兹卡塔
2014年4月30日,0:47
@jiggy在SVN中,从您选择要提交的文件/部分到完成写提交消息之间的这段时间,会记录您选择提交的文件/部分。可能永远不会明确提及它,它可能在SVN客户端中实现,而不是在存储库的实际部分中实现,它可能只是内存中的一些标志,但这就是SVN的阶段。我没有看过HG,但我怀疑它会做同样的事情。 git与git的区别在于git承认它是事物,将其记录到磁盘上,并允许用户直接访问它。
– 8bittree
2014年8月8日在20:13
图中的第二个箭头“舞台文件”可能会引起误解。 “大块头”可能更准确吗?
–艾达
2014年10月10日13:44
#2 楼
既然到目前为止,每个人都以“正式”的方式回答了问题,所以让我用替代方法来做到这一点,以借助隐喻的力量来增强学习。因此,暂存区域类似于:
要提交的文件缓存
不是一系列的管子,而是实际上的自卸车,准备将加载的工作移到存储库中
一个神奇的地方,所选的文件将通过您的巫术变成石头,并可以随心所欲地神奇地传输到存储库中。使文件愉快地进入存储库的砖墙路(如果要还原,则掉落)
在虚拟港口的虚构地方,在那里接收文件的一双水泥鞋,然后扔进存储库海
/>图书馆的接待台,您将文件存放在这里,以备馆员准备在图书馆中存放文件。您以前曾将文件推入文件架,然后再将其与电动装载器一起进入存储库
电滴过滤器咖啡机,如果文件像咖啡粉,那么提交的文件就是冲泡的咖啡
金库旁边的Scrooge McDuck办公室,文件就像硬币,然后进入他庞大的钱罐的金库
宠物商店,一旦将宠物带回家,就一定会犯错。
这太神奇了!
评论
喜欢类比;发芽的方式^ _ ^
–穆萨·阿尔·哈西(Musa Al-hassy)
19年2月22日在14:58
喜欢最后的比喻。
–meTchaikovsky
19年4月9日在0:49
在解释git index = git staging形而上学的常见尝试中,需要“非常”的答案。坦白说,当Linus决定想要索引区域时,我还想知道他在想什么。我喜欢它,但我只是想更好地理解为什么拥有它很好,以及如何最有效地使用它。
–汤姆·艾夫斯(Thom Ives)
12月2日,下午3:56
#3 楼
分阶段是git提交过程之前的一步。也就是说,在git中的提交分为两个步骤:登台和实际提交。只要变更集位于登台区域中,git便允许您根据需要对其进行编辑(替换登台的文件)与其他版本的暂存文件,从暂存中删除更改等)。
隐喻时间破损:旧公寓到新公寓。在执行此操作之前,您将仔细检查所有东西,确定随身携带的物品和扔掉的物品,将其包装在袋子中,然后放在主走廊中。搬运工只是来了,从走廊里拿出(已经包装好的)袋子并运输它们。
在此示例中,搬运工得到东西之前的一切都处于阶段性:您决定去哪里,如何包装等等。 (例如,您可能决定在搬家公司到达之前就把一半的东西扔掉-这是分期的一部分)。
从技术的角度来看,分期还通过拆分来支持事务提交将所有操作分为可能失败(分段)和不能失败(提交)的所有操作:
成功完成git之后的提交是通过事务实现的。登台中的几个步骤可能会失败(例如,您需要提交,但您的HDD已满99.9999%,并且git没有空间来执行提交)。这将导致暂存失败(您的存储库不会被部分提交损坏),并且暂存过程不会影响您的提交历史记录(在发生错误的情况下也不会损坏您的存储库)。
评论
……到目前为止,票数很少。
– Ojonugwa Jude Ochalifu
18年3月18日在7:40
#4 楼
暂存文件就是为提交做准备。由于git将此操作公开给用户控制,因此它允许您创建部分提交,或修改文件,暂存,再次修改文件,然后仅提交或还原为原始修改。暂存允许您可以精确地控制要如何进行版本控制。
#5 楼
为了补充其他出色的答案,以下是“ stage”的名称:我检查了字典中stage的含义,而
的含义都不是与源代码控制概念有关。
用英语,“登台”表示组织和参与(公共活动)的UDF:UDF支持者在索非亚进行了
示威游行。
(来自http://oxforddictionaries.com/definition/stage)
git功能源自以下含义:登台时,您正在准备和组织提交。当然,提交与性能并不太相同,但这在VCS中是重要的事件:-)。
评论
我本来以为它更适合登台
–没用
14年4月30日在16:21
同上。另外,“过程或开发中的一点,时期或步骤”。
– Darien
2014年8月8日23:05
另外,“登台服务器”是一个非常通用的术语,用于描述介于开发和生产之间的服务器。
–永恒21
17年5月2日在19:15
#6 楼
“阶段”是检入文件(即收集要添加到存储库中的更改)过程中的技术上必需的中间步骤。 Git的作者选择使此步骤可见且持久,而其他VCS使其成为提交过程的过渡部分。所以这只是git提供给您的一种选择,因为它可以为什么不这样做?我的看法是,git“ stage”给您的主要是其他VCS没有的是您可以用它来检查文件。实际上,这是一个未命名,未注释的本地提交,它为您完成所有工作并将其永久提交到存储库与根本不保存任何本地存储之间提供了一个中间步骤。
例如,假设您有一个功能已部分完成。它处于稳定状态,通过了所有测试,可以投入生产,但是您需要做更多的工作。您可以暂存所有更改,然后继续使用该功能。
以后,您可以选择仅提交暂存的内容(并将该提交推送到远程存储库)或添加您对暂存区所做的新更改,然后一次全部提交,或者仅撤消新更改,并将工作目录还原为暂存更改时的状态。
完全可以完全跳过过渡区域,如果对过渡区域没有帮助的话,只需对
-a
使用git commit
选项。很多人跳过暂存,GUI工具通常也允许这样做。 评论
“其他VCS则不行”-您如何看待?在Perforce上的货架似乎正在按照您的描述进行,甚至没有额外的花哨
– gna
2014年4月29日在20:39
@gnat是的,当然,许多其他VCS也会为您提供分期的功能。 “其他VCS”是指其他不具有git阶段的VCS,因为这是OP所指的。
– Old Pro
14年4月29日在21:18
我发现这个答案比上述所有答案都好得多,因为这是唯一一个可以阐明为什么分期存在的原因(在技术上是必需的),并解释了它的起源(Git的作者选择使这一步骤可见且持久),我个人认为这是一个很好的定义(中间的,未命名的,未注释的本地提交)。但是,我认为可以通过引用有关暂存源的声明的来源并详细说明为何在技术上需要它来进行改进。 @OldPro
–alexlomba87
19年8月13日在15:58
如果git是从头开始设计的,那么这可能只是广义的“分支”概念的一部分,在这种情况下是本地的,其他人看不见。同样,“存储”也可以作为广义的“分支”概念的特定实例实施(并理解!)。然后,您可以选择任意数量的“暂存”级别。
–罗恩·伯克(Ron Burk)
4月29日17:49
#7 楼
在大多数其他版本控制系统中,有2个存储数据的地方:您的工作副本(当前正在使用的文件夹/文件)和数据存储(版本控制在其中确定如何打包和存储更改的位置)。在Git中,还有第三个选项:登台区域(或索引)。基本上,这是一个装载平台,您可以在其中确定要运出的更改。源:http://gitready.com/beginner/2009/01/18/the-staging-area.html
评论
这似乎没有对之前的6个答案增加任何实质性内容
– gna
2014年7月11日下午4:13
它提到索引。并引用了一篇非常详尽的文章。正在投票。顺便说一句,上面的一些答案仅仅是个笑话。
–绞肉
18年1月19日在21:46
#8 楼
我的理解是,假设我正在开发登录功能,并且需要完成5个连续步骤。因此,这里的分阶段将帮助您进行诸如步骤1完成的步骤。
步骤2完成,现在步骤1和步骤2都是正确的步骤。
步骤3没问题,结帐是步骤2的最新暂存步骤。
完成所有5个步骤(表示功能已完成)的相同方法,现在执行提交。
评论
这似乎并没有对之前9个答案中提出和解释的要点增加任何实质性内容
– gna
16年8月25日在12:30
是的,您是对的,我只是想让解释变得简单而甜美
– palash140
16年8月25日在15:37
我实际上想使用这个概念是什么,我试图解释一下
– palash140
16年8月25日在15:39
考虑在此处进行讨论:第二个TL; DR答案是否可以接受? (与以前的答案相比,FWIW对我来说这看起来并不简单也不甜蜜)
– gna
16年8月25日在15:41
谢谢您,先生,我有一个问题要问。我遇到了很多答案,大多数答案太复杂了,是的,这些答案是正确的,但难以一次消化。我相信,如果您不能以简单的方式解释任何内容,那么您就不会正确学习或不知道如何使用它。所以现在总结或简单的回答方式是不好的吗?
– palash140
16年8月25日在15:56
评论
相关:git的两阶段提交过程(登台)有什么好处?Git确实有自己的词汇量。而且由于每条指令都是用特殊的词汇表述的,所以很难上手。 “阶段”是为特定文件执行git add file.ext或git add。影响所有修改和未跟踪的文件。以这种方式添加的文件被称为“暂存”,它们将包含在下一个“提交”中。提交是您创建的工作的快照,例如与git commit -m“我写了一些东西”。
Git很难理解,因为那里没有概念性教程。所有这些都经过不必要的细节。
您是要删除此问题中的“术语”标签吗?对我来说,这似乎是一个完全有效的标签。
出于某种原因,我能理解分期的重要性的最佳方法是Quora中的以下答案:qr.ae/TbSK2I