本文小编为大家详细介绍“git的pack文件有什么作用”,内容详细,步骤清晰,细节处理妥当,希望这篇“git的pack文件有什么作用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
在git中,pack文件可以有效的使用磁盘缓存,并且为常用命令读取最近引用的对象提供访问模式;git会将多个指定的对象打包成一个成为包文件(packfile)的二进制文件,用于节省空间和提高效率。
本文操作环境: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记录中。
解决办法:
一、删除仓库上的项目,重新提交代码。
二、彻底清除历史记录
识别出最大的三个文件
git verify-pack -v .git/objects/pack/pack-8eaeb...9e.idx | sort -k 3 -n | tail -3296169a146c50dbc100a5d0ee5be87a45cd7cbb3 blob 50296832 49474116 291684796 aae2c1bf6109f2729502349722b4c3402626d755 blob 77762481 77330392 78759794 35047899fd3b0dd637b0da2086e7a70fe27b1ccb blob 100534272 100014418 191670176
查询大文件的文件名
git rev-list --objects --all | grep 35047899fd3b0dd637b0da2086e7a70fe27b1ccb35047899fd3b0dd637b0da2086e7a70fe27b1ccb /wabapi/bulid/master-0.0.1.jar
将该文件从历史记录的所有 tree 中移除
git filter-branch --index-filter 'git rm --cached --ignore-unmatch /wabapi/bulid/master-0.0.1.jar'
执行如下语句
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的pack文件有什么作用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。