2012-05-17 29 views
0

從我能想出來的情況來看,Git將文件的每個版本的內容存儲在一個blob中,引用與文件名等樹。 如果有3個文件完全相同內容,這三個文件被引用到相同的blob。 文件的新版本具有包含文件全部內容的新Blob。Git如何處理文件的增量

現在,由於Git不存儲增量變量,而是將每個版本的文件的全部內容存儲在一個單獨的blob對象中,這是否會導致存儲增加?這是決定項目Git的主要問題嗎? 另外,我的理解版本的Git處理是否正確?

+0

哎呀..我貼得太早。我看到Pack(git gc)會定期執行這個deltafication。謝謝 – maxmelbin

回答

1

在一個層次上,git將對象存儲爲通過散列索引的簡單文件。如果檢入文件的新版本,它會得到一個新的散列,因此會得到一個全新的文件。

在這個級別下,git可以將blob合併到一起,並將這些blob壓縮到這些類似的包中的「packs」blob,可以使用delta壓縮進行壓縮。除了要求用戶偶爾鍵入

git repack -a -d 

或類似的,該過程對用戶和存儲結構是透明的。

嘗試在您的resository上面的命令,看看它是如何影響您的.git目錄的大小。