【问题标题】:Why does Git need to design Index /Stage?为什么 Git 需要设计 Index /Stage?
【发布时间】:2019-07-15 05:52:13
【问题描述】:

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

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

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

图片

【问题讨论】:

    标签: git version-control git-index


    【解决方案1】:

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

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

    我建议在other 文章中查看this

    【讨论】:

    • Afaik add 是它实际创建所有文件对象等的地方,而 commit 只是创建提交对象。
    【解决方案2】:

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

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

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

    【讨论】:

    • 作为旁注,我所指的做法是git commit -a,甚至在任何时候都没有使用add。但你是对的,这同样危险。
    • 是的……是git commit -a
    【解决方案3】:

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

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

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

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

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

    【讨论】:

    • Mercurial 和 Git 的不错比较
    猜你喜欢
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2010-10-03
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多