快照只表示文件内容在给定时间点的内容.所有版本控制系统在概念上以概念方式运行.您希望能够在过去的任何给定点查看源代码的外观.它们还存储差异以节省存储空间.git是唯一的有两种方式:diffs的计算方式和内部存储方式与文件的历史记录没有直接关系,而且每次都不会重新计算差异.
假设您有一个1000字节的文件,几乎每次构建都会更新.如果更改它的一个字节,git将临时存储一个全新的文件副本,并更改一个字节.这是人们翻开并说,"OMG,git是如此愚蠢,它应该立即存储差异.我坚持颠覆."
但是,请考虑一下如何实际使用源代码管理.几乎你想要做的所有事情都是自你上次推动以来发生过变化的事情.因为它还没有计算差异,所以git恰好有一个完整的,易于访问的缓存,包含所有最近更改的文件,其他版本控制系统必须从版本1开始并应用数百个差异来重建相同的内容.
然后,当您执行推送以共享更改时,git gc会自动运行以便更有效地存储这些文件以便通过网络传输,然后计算并存储差异.但是,它不一定是从文件的版本n-1到版本n的差异.如果在许多文件中重复内容,git可以将其考虑在内.如果在几个分支中进行相同的更改,git可以将其考虑在内.如果移动文件,git可以考虑这一点.如果将来发现一些可以提高效率的启发式方法,git可以在不破坏现有客户端的情况下考虑到这一点.它并不坚持diff必须始终从一个连续版本到下一个版本的想法.
与其他版本控制软件相比,这些基本的设计决策使git变得如此之快.
| 归档时间: |
|
| 查看次数: |
930 次 |
| 最近记录: |