1

下图是 Git 流程图,我很奇怪为什么 Git 需要设计Index /Stage

你知道RepositoryWorkspace之间的通信是本地的,在RepositoryWorkspace之间很容易提交或回滚。

为什么 Git 需要设计 Index /Stage ?

图片

在此处输入图像描述

4

3 回答 3

5

这是对即将提交的更改的预览。您可以增量地或一次性地在这个专用空间中构成未来的提交,检查其中的内容,并仅在您对其内容满意时提交。

有些人几乎忽略了它的存在并且从不使用add,依赖于-a他们的提交来盲目地添加所有内容,但这被认为是不好的做法,因为它会在更复杂的情况下,在更复杂的情况下,对索引的理解是至关重要的,这会引起未来的麻烦。

我建议在其他文章中查看this 。

于 2019-02-21T10:49:36.027 回答
2

暂存的文件用作显示,提交者可以在其中看到他将要添加到该特定提交的更改。它还有助于打字,git commit -a这是@Romain 提到的一种不好的做法。

下面是另一个用例,您有更改,a.txtb.txt需要为这些文件执行两个单独的提交,无论出于何种原因(可能将 a.txt 推送到不同的分支,将 b.txt 推送到不同的分支!)。想象一下要招致的工作!

拥有索引文件只是让开发人员的生活变得轻松,这不是一个盲目的设计决定。

于 2019-02-21T11:11:24.780 回答
2

Mercurial 是 Git 的索引/暂存区不是必需的存在证明。Mercurial 和 Git 同样强大(至少就存储修订而言),但在 Mercurial 中,工作树暂存区/建议的下一次提交。在 Git 中,工作树是无关紧要的,索引是暂存区/建议的下一次提交。

也就是说,Git比 Mercurial快得多。这种速度很大程度上是由于 Git 保留了其单独的索引(尽管很多也是由于 Mercurial 在 Python 中而不是 C 中的实现)。因此,如果您愿意的话,索引的存在使 Git 获得了相当多的“快速”。

虽然有些人认为单独的暂存区只是一种烦恼,但其他人(正如您在其他答案中看到的那样)发现这个单独的暂存区非常方便。特别是,您可以暂存某些东西——将文件的某个版本从工作树复制到暂存区域——然后进一步或以不同方式修改工作树文件,例如添加不在 to - 提交该文件的副本。使用git add -pand git reset -p,您可以添加和删除特定修复,同时让调试部分仅存在于工作树中。

所以这提供了拥有索引的两个动机:你可以有一个与你的工作树故意不同的暂存区域,并且 Git 运行得更快,因为Git 的暂存区域已经适合提交。(Mercurial 还没有准备好提交:必须先将工作树按摩成适合提交的形式,并且无论哪种语言实现按摩或您在这个问题上投入多少缓存,仍然会有一些计算在这里努力。)

一旦您接受了单独的暂存区的想法,这将提供第三个动机:现在您可以随时创建额外的暂存区,如果这对某些特定目的有用的话。例如,这git stash就是实施方式。git worktree add(虽然额外的工作树是成对添加的,但它也参与其中:你会得到一个带有新索引的新工作树。如果有的话,那就是新的工作树应该新的索引,即Mercurial模型更好!)

于 2019-02-21T16:34:21.287 回答