Git与大多数其他版本控制系统之间的主要区别之一是,其他版本控制系统倾向于将提交存储为一系列增量-一个提交与下一个提交之间的变更集。这似乎是合乎逻辑的,因为它是存储有关提交的尽可能少的信息。但是提交历史记录越长,用于比较修订范围的计算就越多。
相比之下,Git 在每个修订版中存储整个项目的完整快照。每次提交不会使repo的大小急剧增加的原因是项目中的每个文件都作为文件存储在Git子目录中,以其内容的哈希命名。因此,如果内容没有更改,则哈希值也没有更改,并且提交仅指向同一文件。并且还有其他优化。
所有这些对我来说都是有意义的,直到我偶然发现了有关pack文件的信息,Git定期将数据放入其中以节省空间:
为了节省空间,Git利用了packfile。这是一种格式,其中Git仅将更改过的部分保存在第二个文件中,并带有指向该文件的指针。
这基本上不是回到存储增量吗?如果没有,那有什么不同?如何避免Git遭受其他版本控制系统所遇到的相同问题?
例如,Subversion使用增量,而回滚50个版本意味着撤消50个差异,而使用Git,您只需获取适当的快照即可。除非git也将50个差异存储在packfile中...否则是否有某种机制说“在少量增量后,我们将存储一个新快照”,这样我们才不会堆积太大的变更集?Git还能如何避免三角洲的弊端?
慕妹3242003
ibeautiful
猛跑小猪
鸿蒙传说
随时随地看视频慕课网APP