git原理:pack打包


git向磁盤中存儲對象使用“松散(loose)”對象格式。比如文件a.txt第一個版本大小是10k,第二個版本向其中添加了一行代碼,假如此時文件為10.1k,那么第二個版本會重新產生一個1.1k的文件,這樣會很浪費磁盤空間,所以git會時不時地將多個這些對象打包成一個稱為“包文件(packfile)”的二進制文件,以節省空間和提高效率。在手動執行git gc的時候,或者向遠程推送的時候,都會進行打包的操作。

$ git gc
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), done.
Total 4 (delta 0), reused 0 (delta 0)

$ find .git/objects/ -type f

.git/objects/bd/9dbf5aae1a3862dd1526723246b20206e5fc37
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4
.git/objects/info/packs
.git/objects/pack/pack-5e00a7e5254491edada3599d9091d49afb16c975.idx
.git/objects/pack/pack-5e00a7e5254491edada3599d9091d49afb16c975.pack


執行git gc會主動出發git的打包機制,打包以后,會在 .git/objects/pack文件夾中產生兩個文件,其他的文件都是在此次打包過程中,git認為不能是搖擺的文件,一般是沒有被添加到任何提交記錄中的文件。

.pack 是包文件,這個文件包含了從文件系統中移除的所有對象的內容
.idx是索引文件,這個文件包含了包文件的偏移信息

備注:
  1.可以通過git verify-pack命令來查看包文件,但是我不會。。。。
  2.在打包以后,git會在第二個版本中存儲完整的文件,而在第一個版本中存便宜,這樣做的目的是,git認為檢出第二個版本的概率要大於檢出第一個版本的概率

 

查看git中各種文件的大小:
$ git count-objects -v
count: 0
size: 0
in-pack: 15
packs: 1
size-pack: 8
prune-packable: 0
garbage: 0
size-garbage: 0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM