首頁 >開發工具 >Git >git的pack檔案有什麼用

git的pack檔案有什麼用

WBOY
WBOY原創
2022-06-30 17:41:487090瀏覽

在git中,pack檔案可以有效的使用磁碟緩存,並且為常用命令讀取最近引用的物件提供存取模式;git會將多個指定的物件打包成一個成為套件檔案(packfile)的二進位文件,用於節省空間和提高效率。

git的pack檔案有什麼用

本文操作環境:Windows10系統、Git2.30.0版、Dell G3電腦。

git的pack檔案有什麼用

Git的pack檔案經過精心構造,可以有效地使用磁碟緩存,並為常用命令和讀取最近引用的物件提供“不錯」的訪問模式。

Git的套件檔案格式相當靈活(請參閱文件/技術/套件,format.txt,或將打包檔案在Git的社群書籍)。

打包檔案以兩種主要方式儲存物件:「未刪除」(取得原始物件資料並進行壓縮壓縮)或「刪除」(針對某個其他物件形成增量,然後對產生的增量資料進行壓縮壓縮)。

封包中儲存的物件可以按任何順序排列(不必(不必)按物件類型,物件名稱或任何其他屬性排序),並且可以針對相同類型的其他任何合適的物件製作已刪除的對象。

Git的pack-objects指令使用了幾種啟發式方法,可以為常見指令提供出色的參考位置。

這些啟發式方法既控制了已刪除物件的基礎物件的選擇,也控制了物件的順序。

每個機制大部分都是獨立的,但是它們有一些共同的目標。

Git確實形成了增量壓縮物件的長鏈,但是試探法試圖確保只有「舊」物件在長鏈的末端。

core.deltaBaseCacheLimit會自動使用增量基本快取(其大小由設定變數控制 ),並且可以大幅減少需要讀取大量物件(例如git log-p)的命令所需的「重建」次數。

增量壓縮啟發式典型的Git儲存庫儲存大量對象,因此無法合理地比較所有物件以找到將產生最小增量表示形式的對(和鏈)。增量基數選擇啟發式演算法是基於這樣的思想,即可以在檔案名稱和大小相似的物件中找到良好的增量基數。

每種類型的物件都是單獨處理的(即,一種類型的物件永遠不會用作另一種類型的物件的增量基礎)。

出於增量基數選擇的目的,物件(主要)按檔案名稱和大小排序。進入此排序清單的視窗用於限制被視為潛在增量基礎的物件數量。

擴充知識:

.git/objects/pack 文件過大

可能是由於開發過程中上傳過大文件,雖然現已刪除,但仍保存git記錄中。

解決方法:

一、刪除倉庫上的項目,重新提交程式碼。

二、徹底清除歷史記錄

1.辨識出最大的三個檔案

git verify-pack -v .git/objects/pack/pack-8eaeb...9e.idx | sort -k 3 -n | tail -3
296169a146c50dbc100a5d0ee5be87a45cd7cbb3 blob   50296832 49474116 291684796
 
aae2c1bf6109f2729502349722b4c3402626d755 blob   77762481 77330392 78759794
 
35047899fd3b0dd637b0da2086e7a70fe27b1ccb blob   100534272 100014418 191670176

2.查詢大檔案的檔案名稱

git rev-list --objects --all | grep 35047899fd3b0dd637b0da2086e7a70fe27b1ccb
35047899fd3b0dd637b0da2086e7a70fe27b1ccb /wabapi/bulid/master-0.0.1.jar

3 .將該檔案從歷史記錄的所有tree 中移除

git filter-branch --index-filter 'git rm --cached --ignore-unmatch  /wabapi/bulid/master-0.0.1.jar'

4.執行如下語句

rm -rf .git/refs/original/
 
git reflog expire --expire=now --all
 
git fsck --full --unreachable
 
git repack -A -d
 
git gc --aggressive --prune=now
 
git push --force

推薦學習:《Git教學

以上是git的pack檔案有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn