直接儲存每個檔案每個版本的完整內容是否太低效?如果只新增或改變一行是不是要儲存兩個版本的全部內容?
答案:不是,不完全是!
git使用了一種叫做打包檔案(packfile)的更有效的儲存機制。要建立乙個打包檔案需要以下步驟:
1. 首先要定位內容非常相似的全部檔案;
2. 然後將它們其中之一儲存整個內容;
3. 最後計算相似檔案之間的差異並只儲存差異。
git的檔案打包機制設計的十分巧妙,由於git是檔案內容驅動的,所以git並不關心它計算出來的兩個檔案的差異是否屬於同一檔案的兩個版本。git可以在版本庫的任何地方取出兩個檔案並計算差異,只要它認為它們足夠相似來產生良好的資料壓縮,因此,git有一套相當複雜的演算法來定位和匹配版本庫中潛在的全域性候選差異,此外,git可以構造一系列的差異檔案,從乙個檔案的第乙個版本到第二個、第三個,等等。
git還維護打包檔案表示中每個完整檔案(包括完整內容的檔案和通過差異重建出來的檔案)的原始blob的sha1雜湊值,這給定位包內物件的索引機制提供了基礎。
Git打包檔案
原文 一 打包檔案索引 首先,我們來看一下打包檔案索引,基本上它只是一系列指向打包檔案內位置的書籤.打包檔案索引有兩個版本.版本1的格式用於git 1.6版本之前,版本2的格式用於git 1.6及以後的版本.但是版本2可以被git 1.5.2及以上的git讀取,同時也被後向移植 backport 到...
Git打包檔案
原文 一 打包檔案索引 首先,我們來看一下打包檔案索引,基本上它只是一系列指向打包檔案內位置的書籤.打包檔案索引有兩個版本.版本1的格式用於git 1.6版本之前,版本2的格式用於git 1.6及以後的版本.但是版本2可以被git 1.5.2及以上的git讀取,同時也被後向移植 backport 到...
git 檔案打包命令
git archive 我的蹩腳英文就不獻醜了大家到這個地方 去看吧 簡單的用法就是 git archive format zip output path to file.zip master 將 master 以zip格式打包到指定檔案還有個更簡單的 git archive v0.1 gzip s...