什么是git"快照"?

jen*_*ens 64 git

官方Git文档说:

$ git diff test

这将显示当前工作目录与"test"分支上的快照之间的不同之处

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

小智 43

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

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

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

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

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

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


Fem*_*ref 27

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

  • @jens:快照在这里被用作外行提交的同义词。提交对象本质上是元数据(作者,日期,消息)和工作树内容的快照(表示为树对象)。有关更多信息,请参见[Git对象模型](http://book.git-scm.com/1_the_git_object_model.html)! (3认同)

anK*_*ner 7

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

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

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

git控制下已提交的a.txt文件 提交后由git创建的三个选件

每个文件夹有一个文件

在此处输入图片说明

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

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

在此处输入图片说明->> 在此处输入图片说明

然后犯!

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

在此处输入图片说明

这三个新文件是快照

在此处输入图片说明

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

这也称为松散对象格式

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

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

packfiles在.git / objects / pack下

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


xge*_*ged 6

快照是存储库,因为屏幕截图是视频.

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

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