.git/objects/pack下pack文件很大,但是目前仓库并没有大文件

news/2025/1/12 17:49:38/文章来源:https://www.cnblogs.com/nolca/p/18667113

git秉承“代码安全为主”,每一次commit都会硬性做备份。

之前我使用自己的脚本
#!/bin/bash
#set -x usage() {
echo "Usage: $0 [path] [lines]"
echo "  path: local git repository"
echo "  lines: how much files to show&remove, default 100"
echo
echo "eg1: $0 ~/local_repo 200"
echo "eg2: $0 ."
}
if [[ "$1" == "-h" || "$1" == "--help" ]]; thenusageexit 0
fi# 原教程: https://www.jianshu.com/p/fe3023bdc825
cd $1
head_lines=${2:-100}list(){
# Shows you the largest objects in your repo's pack file. Written for osx.
# @see http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/
# @author Antony Stubbs# set the internal field spereator to line break, so that we can iterate easily over the verify-pack output
IFS=$'\n';# list all objects including their size, sort by size, take top 10
objects=`git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head -n $head_lines`output="NO.,raw,pack,SHA,path"
i=0
for y in $objects
doi=$((i+1))# extract the size in bytessize=$((`echo $y | cut -f 5 -d ' '`/1024))# extract the compressed size in bytescompressedSize=$((`echo $y | cut -f 6 -d ' '`/1024))# extract the SHAsha=`echo $y | cut -f 1 -d ' '`# find the objects location in the repository treefileLoc=`git rev-list --all --objects | grep $sha`#lineBreak=`echo -e "\n"`output="${output}\n${i},${size},${compressedSize},${fileLoc}"
doneecho -e $output | column -t -s ', '
}
list_hint() {
echo "Remember the first number of files to be deleted, then press q to exit.
请记住要删除前多少个文件,然后按q退出。All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file.
所有大小均以kB为单位。“pack”列:pack内,raw文件压缩后的大小。"
}rm_local() {
git filter-branch --force --index-filter "git rm -rf --cached --ignore-unmatch $*" --prune-empty --tag-name-filter cat -- --all
}rm_all() {
rm_local "${files[*]}"
set -x
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
set +xcmd_danger="pushd ${1} && \
git push origin $(git rev-parse --abbrev-ref HEAD) --force && \
git remote prune origin && \
popd"echo "$cmd_danger" | xclip -selection clipboard && copied_en="📋 copied, " && copied_cn="📋 已复制到剪贴板,"
echo "${copied_en}please execute the below command manually to clean the remote repository: 
${copied_cn}请手动执行以下命令,以清理远程仓库:"
echo -e "$cmd_danger"}set -e
trap 'echo "💡 Tips for line 40 error: ${head_lines} is too large, should be lesser. ${head_lines}太大了,再小点。"' EXIT
result=$(list)
trap - EXITecho -e "$(list_hint)\n\n$result" | less -K -S
# awk vs cut: awk可以将连续的空格视为一个分隔符,而cut则不行
files=$(echo "$result" | tail -n +2 | awk '{print $5}')echo -n "🗑 (ENTER to delete all listed) How many largest files to delete:"
read -r lines
[ -n "$lines" ] && head_lines=$lines
files=($(echo "$files" | head -n $head_lines))
IFS=$' \t\n'
result=$(printf "%s\n" "${files[@]}")
set +e
echo -e "⚠️  即将删除以下文件,按q继续,按Ctrl+C取消\n\n$result" | less -K && rm_all $1

但是这次弹了一个警告:

git-filter-branch has a glut of gotchas generating mangled historyrewrites.  Hit Ctrl-C before proceeding to abort, then use analternative filtering tool such as 'git filter-repo'(https://github.com/newren/git-filter-repo/) instead.  See thefilter-branch manual page for more details; to squelch this warning,set FILTER_BRANCH_SQUELCH_WARNING=1

省流

❯ pip install git-filter-repo
❯ git filter-repo --strip-blobs-bigger-than 1M --force
NOTICE: Removing 'origin' remote; see 'Why is my origin removed?'in the manual if you want to push back there.(was https://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@github.com/AClon314/tinyrenderer)
Processed 303 blob sizes
Parsed 67 commits
New history written in 0.05 seconds; now repacking/cleaning...
Repacking your repo and cleaning out old unneeded objects
HEAD 现在位于 b01235c Lesson 4: perspective=v.xyz / (1-v.z/cam); cam=0.8~2, too large will likely orthogonal 正交
枚举对象中: 327, 完成.
对象计数中: 100% (327/327), 完成.
使用 12 个线程进行压缩
压缩对象中: 100% (174/174), 完成.
写入对象中: 100% (327/327), 完成.
总共 327(差异 186),复用 239(差异 145),包复用 0
Completely finished after 0.11 seconds.
❯ git remote add origin https://github.com/user/repo  # 根据git提示
❯ git push

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/868276.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【bt下载软件qBittorrent-增强版】下载链接

原作者github项目地址:https://github.com/c0re100/qBittorrent-Enhanced-Edition 找到当前的最新版本根据自身需要选择下载版本,这里选的是windows版本

鸟哥的Linux私房菜 基础学习篇 第四版PDF、EPUB免费下载

Linux入门书升级版,适用Linux系统应用和开发及运维的人员,涵盖linux内核,命令行,嵌入式,基于CentOS,7.x适读人群 :Linux初学者 适合Linux管理员作为参考手册 Linux入门书升级版,适用Linux系统应用和开发及运维的人员,涵盖linux内核,命令行,嵌入式,基于CentOS,7.x电…

领域驱动设计:软件核心复杂性应对之道(修订版)PDF、EPUB免费下载

本书是领域驱动设计方面的经典之作,修订版更是对之前出版的中文版进行了全面的修订和完善。全书围绕着设计和开发实践,结合若干真实的项目案例,向读者阐述如何在真实的软件开发中应用领域驱动设计。书中给出了领域驱动设计的系统化方法,并将人们普遍接受的一些实践综合到一…

JAVA之集合

1、集合集合可以存储引用数据类型; 集合不可以存储基本数据类型,若要存储,需封装成包装类;2、集合和数组的对比长度【数组长度固定,集合长度可变】 存储类型【数组可以存基本数据类型和引用数据类型,集合可以存引用数据类型,若存储基本数据类型,需封装成包装类】3、Arr…

[题目记录]P9999 [Ynoi2000] tmostnrq

当前自己写过了码量第二大的题目 , 不管怎么说对拍非常重要 .P9999 [Ynoi2000] tmostnrq 题意 给定 \(n\) 个顶点的树,顶点编号为 \(1,\dots,n\),给定长度 \(n_0\) 的序列 \(a_1,\dots,a_{n_0}\),共 \(m\) 次查询,每次查询给定 \(l,r,x\),问树的顶点 \(x\),依次向 \(a_l,…

多光谱火焰智能监测摄像机

多光谱火焰智能监测摄像机将在未来继续发展。未来的摄像机可能会更加智能化,具备更强的自主识别和决策能力,进一步提升火灾监测的灵敏度和准确性。此外,随着物联网的发展,这些摄像机还有望与其他设备和系统实现更深入的数据共享和集成应用,为整个安全监控体系增添新的可能…

明火智能监测摄像机

明火智能监测摄像机检测到火源时,它会立即触发报警机制,以警告人员采取适当的行动。它可以与各种报警系统集成,发出清晰可闻的警报声,并通过网络将警报信息发送到相关部门或人员的手机应用程序,确保快速响应。明火智能监测摄像机全天候工作,不间断地监测环境中的火情。它…

山体滑坡自动监测识别摄像机

山体滑坡自动监测识别摄像机系统通过技术创新和智能化应用,为减少自然灾害带来的损失和风险提供了重要的技术手段和支持。随着技术的进步和系统的完善,相信这类系统将在全球范围内得到广泛应用,为社会公共安全和环境保护作出更大贡献。对于现代社会而言,山体滑坡作为自然灾…

水位智能监测识别摄像机

水位智能监测识别摄像机的应用前景十分广阔。未来,这些摄像机有望进一步提升监测精度和反应速度,扩展到更多复杂的水域环境和特殊应用场景中,为保障社会公共安全和生态环境做出更大贡献。总之,水位智能监测识别摄像机以其先进的技术和多功能性能,正在成为水域监测领域的重…

1.12 CW 模拟赛 T1. 括号序列

思路 根据赛时的检验, 典型的动点问题的 \(\rm{trick}\) 并不能在这里使用, 也就是说, 分类讨论前缀 + \(i\) + 后缀 前缀 + \(i\) 后缀 + \(i\)是不可行的 考虑括号串问题的常见做法, 先将其赋值成 \(1, -1\) 之后进行处理 你发现这种做法有枚举字段和的瓶颈, 所以也不可行 当…

【Docker】Docker搭建一款开源的RAG聊天应用

项目介绍 Kotaemon是一个由Cinnamon开发的开源项目,旨在提供一个基于检索增强生成(RAG)技术的用户界面,使用户能够与自己的文档进行交互问答。 功能特点 文档问答:Kotaemon允许用户通过自然语言查询与文档进行交互,快速获取所需信息。这一功能在学术研究、企业文档管理等…

客梯自动监测识别摄像机

客梯自动监测识别摄像机通过技术创新和智能化应用,为现代城市客梯的安全管理提供了全新的解决方案。随着技术的不断进步和应用场景的扩展,相信这类系统将在全球范围内得到广泛应用,为乘客的安全出行和客梯运行的高效管理提供更加可靠的保障和支持。当今社会,随着城市建设的…