什么是git“快照”?

时间:2011-02-10 23:51:17

标签: git

The official Git doc说:

  

$ git diff test

     

这将显示当前工作目录与“测试”分支上的快照之间的区别

作为一个新手,这非常令人困惑。我从来没有听说过快照一词。他们是指“测试”分支的“HEAD”吗?

8 个答案:

答案 0 :(得分:43)

术语快照也在git参考站点中使用

这是“修订版”的替换术语。在其他版本控制系统中,跟踪对单个文件的更改并将其作为修订引用,但是使用git跟踪整个工作区,因此他们使用术语快照来表示差异。

来自http://gitref.org/index.html

  

我们可能会编写一个可以更轻松地存储项目快照而无需每次都复制整个目录的工具,而不是编写一个单独编译每个文件的工具(如Subversion)。

     

这基本上就是Git。你告诉Git你想用git commit命令保存项目的快照,它基本上记录了项目中所有文件在那一点上的样子。然后,大多数命令与这些清单一起使用,以查看它们之间的区别或从中提取内容等等。

     

如果您将Git视为存储,比较和合并项目快照的工具,则可能更容易理解正在发生的事情以及如何正确地执行操作。

答案 1 :(得分:25)

快照是特定时间点的某些内容(例如文件夹)的状态。在这种情况下,快照表示测试分支的当前内容,这不一定是头版本。

答案 2 :(得分:7)

为了解释术语快照清晰。 请允许我介绍另外两件事

  1. git松散对象格式
  2. git Packfiles

假设我们有一个名为“ a.txt”的文件,其内容是在git控制下的十个“ a”字母。 提交此文件后,它将在.git / objects路径下创建三个文件夹,每个文件夹都有一个文件。每个文件为 S.N.A.P.S.H.O.T

a.txt file under git control which has been committed three floders created by git after committed

每个文件夹都有一个文件

enter image description here

现在,我们编辑a.txt文件以查看会发生什么情况

我们将第一个字母“ a”更改为字母“ b”

enter image description here->> enter image description here

然后承诺!

Git在三个新的目录下创建了其他三个新文件

enter image description here

这三个新文件是 S.N.A.P.S.H.O.Ts

enter image description here

每次执行COMMIT时,git会将快照保存到磁盘,而不是将同一文件的新版本和旧版本之间的增量保存。即使我们只更改了一个文件的一个字母,git会将整个文件另存为快照

这也称为松散对象格式

在这种情况下,git将比其他vcs提供更多的磁盘空间(例如subversion)。

但是出色的git会不时执行另一项工作(git gc),这会创建 PACKFILES ,并删除内容类似于缩小自身大小的手套。

packfile位于.git / objects / pack

您自己执行“ git gc”命令后即可看到它。

答案 3 :(得分:6)

快照是一个存储库,因为屏幕截图是视频。

它是某个时间点的存储库的内容(文件和文件夹),存储库的状态,如果愿意的话。

该内容由Git的树对象表示,并存储在.git文件夹中。当您commit时,将存储库的当前工作目录存储为新存储库的快照。您的Git存储库由一系列快照组成,而其他VCS则由一系列差异组成。

答案 4 :(得分:3)

首先,这不是官方的git文档。这是一本社区撰写的书。虽然它可能具有相当的权威性,但它不是福音。

AFAIK,“快照”在git中没有任何正式含义。当然git diff manpage没有提到它。在给定的上下文中,它可能是一个非正式的参考,如何在本书的例子中使用“测试”分支,即作为正在进行的工作的快照,用于测试目的。

答案 5 :(得分:1)

我的理解是,快照通常只是git用来存储数据的“实体”。例如,与将其数据存储为一系列“增量”/变更集(如SVN)相反,您对git执行的每个提交都会创建一个“提交对象”,该提交引用代码在该时间点的外观快照

正如@Femaref所说,它是特定时间的代码状态,并不一定意味着它是测试分支的负责人,但可能在您看到的示例中。

答案 6 :(得分:0)

根据发布的其他定义:

快照是清单形式的跟踪文件的当前状态的表示,可以与其他清单进行比较,以查看差异的位置

Git只跟踪清单跟踪时的第一刻之间的差异。如果自第一个快照以来文件尚未更改,则所有后续快照都将引用第一个快照。如果文件已更改,则所有后续快照都将引用具有最新更改的快照。 git存储实际上是从最后一个到第一个快照的链接历史。分支基本上是时间轴中的一个分支,允许来自主链上特定快照的备用历史快照链。

分支通常用于特征,并且可能在某些时候合并到主分支中。如果没有意图合并,而是与原始项目的分歧,以一个新的,完全独立的项目副本的形式与其自己的历史,它通常被称为硬分叉,指的是& #34;路上的叉子"。

答案 7 :(得分:-1)

以下是使用术语 snapshot 的一些上下文:

  1. 通过拍摄索引的快照来创建新的提交。
  2. 提交是给定时间回购的快照。