快照的概念

时间:2011-09-21 19:22:03

标签: git snapshot

Git basic terminology中有快照的概念。

这个概念用于Git工作流程:

  
      
  1. 您可以修改工作目录中的文件。

  2.   
  3. 您暂存文件,将快照添加到您的暂存中   区域。

  4.   
  5. 你做了一个提交,它接受文件中的文件   暂存区域并将快照永久存储到您的Git   。目录

  6.   

你能准确解释什么是快照,并展示一些文件的小例子及其快照以及为什么Git使用它们而不是像在其他VCS中那样产生差异?

1 个答案:

答案 0 :(得分:7)

快照只表示文件内容在给定时间点的内容。所有版本控制系统在概念上以概念方式运行。您希望能够在过去的任何给定点查看源代码的外观。它们还存储差异以节省存储空间。 git是唯一的有两种方式:diffs的计算方式和内部存储方式与文件的历史记录没有直接关系,而且每次都不会重新计算差异。

假设您有一个1000字节的文件,几乎每次构建都会更新。如果你更改它的一个字节,git将临时存储一个全新的文件副本,并更改​​一个字节。这是人们翻开并说,“OMG,git是如此愚蠢,它应该立即存储差异。我坚持颠覆。”

但是,请考虑一下如何实际使用源代码管理。几乎你想要做的所有事情都是自你上次推动以来发生过变化的事情。因为它还没有计算差异,所以git恰好有一个完整的,易于访问的缓存,包含所有最近更改的文件,其他版本控制系统必须从版本1开始并应用数百个差异来重建相同的内容

然后,当您推送共享更改时,git gc会自动运行,以便更有效地存储这些文件,以便通过网络传输,然后计算并存储差异。但是,它不一定是从文件的版本n-1到版本n的差异。如果在许多文件中重复内容,git可以将其考虑在内。如果在几个分支中进行相同的更改,git可以将其考虑在内。如果移动文件,git可以考虑这一点。如果将来发现一些可以提高效率的启发式方法,git可以在不破坏现有客户端的情况下考虑到这一点。它并不是因为差异必须始终是从一个连续版本到下一个版本的想法。

与其他版本控制软件相比,像这样的基本设计决策让git变得如此之快。