首页  >  文章  >  开发工具  >  git的pack文件有什么用

git的pack文件有什么用

WBOY
WBOY原创
2022-06-30 17:41:486995浏览

在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