官方的Git文档说:
$ git diff test这将向您显示当前工作目录与“ test”分支上的快照之间的区别
作为一个新手,这非常令人困惑。我从未听说过快照一词。他们是指“测试”分支的“头”吗?
官方的Git文档说:
$ git diff test这将向您显示当前工作目录与“ test”分支上的快照之间的区别
作为一个新手,这非常令人困惑。我从未听说过快照一词。他们是指“测试”分支的“头”吗?
Answers:
快照是特定时间点某物(例如文件夹)的状态。在这种情况下,快照表示测试分支的当前内容,而不必是总修订版。
git diff test您真正的意思是“与test分支所指向的提交进行比较”。
术语快照也在git参考站点中使用
它是“修订”的替代术语。在其他版本控制系统中,将跟踪对单个文件的更改并将其称为修订,但是使用git时,您将跟踪整个工作区,因此它们使用术语快照来表示差异。
来自http://gitref.org/index.html
与其编写像Subversion这样的单独版本化每个文件的工具,我们不如编写一个可以更轻松地存储项目快照的工具,而不必每次都复制整个目录。
这本质上就是Git。您告诉Git您想要使用git commit命令保存项目的快照,并且它基本上记录了此时项目中所有文件的外观清单。然后,大多数命令会与这些清单一起使用,以查看它们之间的差异或从中提取内容等。
如果您将Git视为用于存储,比较和合并项目快照的工具,则可能更容易了解正在进行的操作以及如何正确执行操作。
git checkout <commit> <filename>git checkout示例kernel.org/pub/software/scm/git/docs/…中
为了解释snapshot清楚这个术语。请允许我介绍另外两件事
假设我们有一个名为“ a.txt”的文件,其内容是在git控制下的十个“ a”字母。提交此文件后,它将在.git / objects路径下创建三个文件夹,每个文件夹都有一个文件。每个文件都是SNAPSHOT。
每个文件夹有一个文件
现在,我们编辑a.txt文件以查看会发生什么
我们将第一个字母“ a”更改为字母“ b”
然后犯!
Git在三个新文件夹下创建了其他三个新文件
这三个新文件也是SNAPSHOT
每次执行COMMIT git都会将快照保存到磁盘,而不是将同一文件的新版本和旧版本之间的增量保存。即使我们只更改了一个文件的一个字母,git也会将整个文件另存为快照。
这也称为松散对象格式。
在这种情况下,git将比其他vc (例如subversion)花费更多的磁盘空间 ,从而节省了同一文件的新版本和旧版本之间的增量。但是使用的好处是snapshot缩短了commit阶段时间。
但是,出色的git会git gc不时地执行另一项工作,这会创建PACKFILES并删除快照,快照中的内容类似于缩小自身大小。这些工作之后git gc,git的磁盘成本将与使用增量方式的其他VCS一样。
通过snapshot和git gc。Git将比其他使用增量方式的VCS更快commit阶段并且花费磁盘大小与使用增量方式的其他VCS相似。
Git在性能和磁盘空间成本之间找到了一种平衡的方法。
GIT是最好的
packfiles在.git / objects / pack下
您自己执行“ git gc”命令后即可看到它。
首先,这不是官方的git文档。这是一本社区著作。虽然它可能相当权威,但它不是福音。
AFAIK,“快照”在git中没有任何正式含义。当然git diff手册没有提到它。在给定的上下文中,它可能是对本书中的示例中如何使用“测试”分支的非正式参考,即,作为正在进行的工作的快照,用于测试目的。
For quickly making a snapshot, you can omit both "save" and <message>
根据发布的其他定义:
快照以清单形式表示跟踪文件的当前状态。,可以将其与其他清单进行比较以查看差异所在。
Git仅从清单被追踪的第一刻开始追踪清单之间的差异。如果自第一个快照以来未更改文件,则所有后续快照将引用第一个快照。如果文件已更改,则所有后续快照将引用具有最新更改的快照。git存储的是从上到下的快照快照历史。分支基本上是时间轴上的一个分支,它允许从主链上的特定快照到快照的备用历史链。
分支通常是用于要素的,因此可以在某些时候合并到主分支中。如果没有意图合并,而是与原始项目有所不同,以新的,完全独立的项目副本形式复制其自身的历史,则通常称为“硬分叉”,指的是“道路上的分叉”。