直接記錄快照,而非差異比較
快照是什么,請看該篇文章《什么是拷貝、復(fù)制、備份、副本、鏡像、快照?》
Git 和其它版本控制系統(tǒng)(包括 Subversion 和近似工具)的主要差別在于 Git 對待數(shù)據(jù)的方法。 從概念上來說,其它大部分系統(tǒng)以文件變更列表的方式存儲信息,這類系統(tǒng)(CVS、Subversion、Perforce、Bazaar 等等) 將它們存儲的信息看作是一組基本文件和每個文件隨時間逐步累積的差異 (它們通常稱作 基于差異(delta-based) 的版本控制)。

存儲每個文件與初始版本的差異。
存儲每個文件與初始版本的差異.
Git 不按照以上方式對待或保存數(shù)據(jù)。反之,Git 更像是把數(shù)據(jù)看作是對小型文件系統(tǒng)的一系列快照。 在 Git 中,每當(dāng)你提交更新或保存項(xiàng)目狀態(tài)時,它基本上就會對當(dāng)時的全部文件創(chuàng)建一個快照并保存這個快照的索引。 為了效率,如果文件沒有修改,Git 不再重新存儲該文件,而是只保留一個鏈接指向之前存儲的文件。 Git 對待數(shù)據(jù)更像是一個 快照流。

Git 存儲項(xiàng)目隨時間改變的快照。
在git中,Git 中所有的數(shù)據(jù)在存儲前都計(jì)算校驗(yàn)和,然后以校驗(yàn)和來引用。 這意味著不可能在 Git 不知情時更改任何文件內(nèi)容或目錄內(nèi)容。 這個功能建構(gòu)在 Git 底層,是構(gòu)成 Git 哲學(xué)不可或缺的部分。 若你在傳送過程中丟失信息或損壞文件,Git 就能發(fā)現(xiàn)。
Git 用以計(jì)算校驗(yàn)和的機(jī)制叫做 SHA-1 散列(hash,哈希)。 這是一個由 40 個十六進(jìn)制字符(0-9 和 a-f)組成的字符串,基于 Git 中文件的內(nèi)容或目錄結(jié)構(gòu)計(jì)算出來。