Git 基本术语中有一个快照的概念。
Git工作流中使用了这个概念:
你能解释什么是快照,并显示一些文件和快照的小例子吗?为什么Git使用快照而不是像在其他VCS中那样造成差异?
发布于 2011-09-21 20:24:22
快照只是指文件在给定时间点上的内容。所有版本控制系统都从概念上对快照进行操作。您希望能够在过去的任何给定点上看到源代码的样子。为了节省存储空间,它们也都存储差异。git是唯一的地方有两种方式:在内部计算和存储差异的方式与文件的历史没有直接关系,并且这些差异不会在每次可能的时候被重新计算。
假设您有一个1000字节的文件,可以在几乎每个构建上进行更新。如果您更改其中的一个字节,git将临时存储文件的一个全新副本,并更改一个字节。在这里,人们兴奋地说:“天哪,git太蠢了,它应该马上存储差异。我坚持颠覆。”
但是,请考虑如何实际使用源代码管理。几乎所有你想做比较的事情都是从你上一次推动以来发生的变化。因为它还没有计算出差异,所以git恰好有一个完整的、容易访问的缓存,所有这些最近更改的文件,其他版本控制系统必须从版本1开始,并应用数百个差异来重建相同的内容。
然后,当您进行推送以共享您的更改时,将自动运行git gc,以便更有效地存储这些文件,以便在网络上传输,然后计算和存储差异。但是,它不一定是文件的版本n到版本n之间的区别。如果在多个文件中重复内容,git可以考虑到这一点。如果在多个分支中进行了相同的更改,则git可以考虑到这一点。如果文件被移动,git可以考虑到这一点。如果将来发现了一些可以提高效率的启发式方法,git可以在不破坏现有客户端的情况下考虑到这一点。这并不是一成不变的想法,即差异必须始终从一个连续版本到下一个版本。
与其他版本控制软件相比,像这样的基本设计决策使得git变得如此之快。
https://stackoverflow.com/questions/7505427
复制相似问题