直接記錄快照,而非差異比較
快照是什么,請看該篇文章《什么是拷貝碉熄、復(fù)制、備份肋拔、副本、鏡像呀酸、快照?》
Git 和其它版本控制系統(tǒng)(包括 Subversion 和近似工具)的主要差別在于 Git 對(duì)待數(shù)據(jù)的方法凉蜂。 從概念上來說,其它大部分系統(tǒng)以文件變更列表的方式存儲(chǔ)信息性誉,這類系統(tǒng)(CVS窿吩、Subversion、Perforce错览、Bazaar 等等) 將它們存儲(chǔ)的信息看作是一組基本文件和每個(gè)文件隨時(shí)間逐步累積的差異 (它們通常稱作 基于差異(delta-based) 的版本控制)纫雁。
存儲(chǔ)每個(gè)文件與初始版本的差異.
Git 不按照以上方式對(duì)待或保存數(shù)據(jù)倾哺。反之轧邪,Git 更像是把數(shù)據(jù)看作是對(duì)小型文件系統(tǒng)的一系列快照。 在 Git 中羞海,每當(dāng)你提交更新或保存項(xiàng)目狀態(tài)時(shí)忌愚,它基本上就會(huì)對(duì)當(dāng)時(shí)的全部文件創(chuàng)建一個(gè)快照并保存這個(gè)快照的索引。 為了效率却邓,如果文件沒有修改硕糊,Git 不再重新存儲(chǔ)該文件,而是只保留一個(gè)鏈接指向之前存儲(chǔ)的文件腊徙。 Git 對(duì)待數(shù)據(jù)更像是一個(gè) 快照流简十。
在git中,Git 中所有的數(shù)據(jù)在存儲(chǔ)前都計(jì)算校驗(yàn)和撬腾,然后以校驗(yàn)和來引用螟蝙。 這意味著不可能在 Git 不知情時(shí)更改任何文件內(nèi)容或目錄內(nèi)容。 這個(gè)功能建構(gòu)在 Git 底層时鸵,是構(gòu)成 Git 哲學(xué)不可或缺的部分胶逢。 若你在傳送過程中丟失信息或損壞文件厅瞎,Git 就能發(fā)現(xiàn)。
Git 用以計(jì)算校驗(yàn)和的機(jī)制叫做 SHA-1 散列(hash初坠,哈希)和簸。 這是一個(gè)由 40 個(gè)十六進(jìn)制字符(0-9 和 a-f)組成的字符串,基于 Git 中文件的內(nèi)容或目錄結(jié)構(gòu)計(jì)算出來碟刺。