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

git原理:pack打包的更多相关文章

  1. git的压缩原理;git的pack文件;git gc操作原理;Resolving deltas: 100% (2695/2695), done.做了什么

    文件含义 verify-pack -- validate packed git archive files .git/objects/pack/.pack为压缩后的文件,把.git/objects/下 ...

  2. Git原理与命令大全

    Git (wiki: en  chs )是一个免费开源的分布式版本控制系统,由linux内核作者linus Torvalds开发,大型开源项目linux kernel.Android.chromium ...

  3. git原理及如何选择分支模式

    一.git 原理介绍 1.git的四个工作区域 Git有四个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或Git Direc ...

  4. dotnet pack 打包文件版本号引起 "Could not load file or assembly" 问题

    如果不是遇到,真的不会想到,代码世界的问题真是千奇百怪,这次遇到的是 dotnet pack 打包文件版本号引起的问题. 之前进行 nuget 打包都是在 Visual Studio build 时进 ...

  5. Git原理入门简析

    为了获得更好的阅读体验,建议访问原地址:传送门 前言: 之前听过公司大佬分享过 Git 原理之后就想来自己总结一下,最近一忙起来就拖得久了,本来想塞更多的干货,但是不喜欢拖太久,所以先出一版足够入门的 ...

  6. Git原理入门解析

    前言: 之前听过公司大佬分享过 Git 原理之后就想来自己总结一下,最近一忙起来就拖得久了,本来想塞更多的干货,但是不喜欢拖太久,所以先出一版足够入门的: 一.Git 简介 Git 是当前流行的分布式 ...

  7. git原理学习记录:从基本指令到背后原理,实现一个简单的git

    一开始我还担心 git 的原理会不会很难懂,但在阅读了官方文档后我发现其实并不难懂,似乎可以动手实现一个简单的 git,于是就有了下面这篇学习记录. 本文的叙述思路参照了官方文档Book的原理介绍部分 ...

  8. Git原理及常用操作命令总结

    git原理介绍及操作 git 原理——

  9. Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) (转)

    git pull的时候遇到 Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) y 于 ...

随机推荐

  1. ubuntu14.04 flash driver 安装

    直接将14.04镜像直接放到flash driver 中 然后在bios设置flash driver 优先启动 然后格出一块盘给ubuntu 安装使用 按操作要求一路点下去就可以,记得选windows ...

  2. zendstdio的智能提示功能

    在项目的include的那个地方邮寄,在addsource file  然后指向TP类库的文件夹,刷新项目即可有智能提示

  3. 2. Add Two Numbers【medium】

    2. Add Two Numbers[medium] You are given two non-empty linked lists representing two non-negative in ...

  4. c#序列化和反序列化list

    List<UserData> lstStuModel = new List<UserData>() { new UserData(){Name="001", ...

  5. 关于UITableView界面刷新

    在TableView中的数据发生改变的时候,往往会发现UITableView中的数据没有更新,通常需要滚动后才会更新. 这个是因为他的重绘机制的问题. 一般情况下可以用下面这个方法解决: 在viewW ...

  6. phpexcel图形图表(二)图形

    原创文章,转载请注明出处:http://www.cnblogs.com/phpgcs 本篇文章实例演示如上图,画3种图形以及多sheet操作等 先回忆下第一篇中line图形的API调用步骤: 1,引入 ...

  7. nc 查看端口是否 联通

    nc 47.9.16.1 3306 如果卡住,说明 该IP的这个端口 访问不通, 防火墙拦截了

  8. C语言 结构体(嵌套结构体--结构体数组)

    //结构体--嵌套结构体和结构体数组 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> ...

  9. ubuntu 16.04.3配置MinDoc的PDF导出功能

    1. 安装 wkhtmltopdf,然后reboot sudo apt-get install wkhtmltopdf 2. 进入cd /usr/bin 测试一下,看目录下有没有pdf生成 wkhtm ...

  10. VS2005 Manifest 配置问题总结

    一.问题 编译某个遗留工程后,运行程序时报错,“由于应用程序的配置不正确,应用程序无法启动.重新安装应用程序可能会解决这个问题.” 查看生成的Manifest文件如下: <?xml versio ...