Git清理历史大文件

简介: Git清理历史大文件

假设要删除大文件yolov3Path.pth

1 垃圾回收

先进行垃圾回收,并压缩一些文件

$ git gc --prune=now

Git最初向磁盘中存储对象使用松散的格式,后续会将多个对象打包为一二进制包文件(packfile),以节省磁盘空间

.pack文件存储了对象的内容
.idx文件存储了包文件的偏移信息,用于索引具体的对象

2 查找大文件

使用下面命令显示所commit其所关联的所有对象中占用最大的文件:

$ git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -3 | awk '{print$1}')"

输出

e9461c55c3b8807351909cf7bb46eb22a8df5533 README.md
b866711af76e7d7cc87d9828f8ddde8ea865d053 yolov3Path.pth

verify-pack -v *.idx:查看压缩包内容

3 删除指定的大文件

$ git filter-branch --force --index-filter "git rm -rf --cached --ignore-unmatch yolov3Path.pth" --prune-empty --tag-name-filter cat -- --all
Rewrite bf551acd0ca40a5671bcf2d4cad83a999b8baf52 (10/16) (0 seconds passed, remaining 0 predicted)    rm 'bigqin'
Rewrite d1d31551ecb36d362fd1051152f1fc886e4df95c (11/16) (0 seconds passed, remaining 0 predicted)    rm 'bigqin'
Rewrite da902adff9f3f890aa4c3304c5ac6d1e14f589da (12/16) (0 seconds passed, remaining 0 predicted)    rm 'bigqin'
Rewrite c96090316c3600e6e190cb9f99cf14a58f6f09ca (13/16) (0 seconds passed, remaining 0 predicted)    rm 'bigqin'
Rewrite 9d6c9194d76c5e0aa6c9119445681c9fbdf735a3 (14/16) (1 seconds passed, remaining 0 predicted)    rm 'bigqin'
Rewrite b1e2f243a559547e3a0f5eaa18f6a31a35eaa57a (14/16) (1 seconds passed, remaining 0 predicted)    rm 'bigqin'
Rewrite ac49fbb891648b73bbd31b4e82b56bbd71254384 (14/16) (1 seconds passed, remaining 0 predicted)    rm 'bigqin'
.....

filter-branch 命令通过一个filter来重写历史提交,这个filter针对指定的所有分支(rev-list)运行。


–index-filter:过滤Git仓库的index,该过滤命令作用于git rm -rf --cached --ignore-unmatch bigqin。不checkout到working directory,只修改index的文件,速度快。


–cached会删除index中的文件


–ignore-unmatch:如果没匹配到文件,不会报错,会继续执行命令


最后一个参数file/directory是要被删除的文件的名字


–prune-empty:指示git filter-branch 完全删除所有的空commit。


-–tag-name-filter:将每个tag指向重写后的commit。


cat命令会在收到tag时返回tag名称


–-选项用来分割 rev-list 和 filter-branch 选项


–all参数告诉Git我们需要重写所有分支(或引用)。

4 Reference

https://www.jianshu.com/p/7ace3767986a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

目录
相关文章
|
1月前
|
开发工具 git 开发者
Git版本管理常见文件提交流程讲解
以上就是Git常见文件提交流程概述。掌握此流程对于任何使用Git进行版本控制和协同工作项目团队成员都至关重要。
81 13
|
8月前
|
开发工具 git 索引
怎么取消对project.private.config.json这个文件的git记录
通过以上步骤,您可以成功取消对 `project.private.config.json`文件的Git记录。这样,文件将不会被包含在未来的提交中,同时仍保留在您的工作区中。
225 28
|
开发工具 git
如何使git提交的时候忽略一些特殊文件?
如何使git提交的时候忽略一些特殊文件?
|
9月前
|
前端开发 Java 开发工具
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
496 0
|
Shell 开发工具 git
git学习三:git使用:删除仓库,删除仓库内文件
通过GitHub的设置页面删除仓库,以及如何使用Git命令行删除仓库中的文件或文件夹。
799 1
git学习三:git使用:删除仓库,删除仓库内文件
|
开发工具 git 索引
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
361 4
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
146 1
|
缓存 开发工具 git
给Git仓库添加.gitignore:清理、删除、排除被Git误添加的临时文件
本文介绍了如何为Git仓库添加`.gitignore`文件来排除不需要跟踪的临时文件,并展示了如何删除已经被提交的临时文件缓存,以清理Git仓库中的不必要文件。
1581 0
给Git仓库添加.gitignore:清理、删除、排除被Git误添加的临时文件
|
开发工具 git iOS开发
服务器配置Huggingface并git clone模型和文件
该博客提供了在服务器上配置Huggingface、安装必要的工具(如git-lfs和huggingface_hub库)、登录Huggingface以及使用git clone命令克隆模型和文件的详细步骤。
1538 1
|
开发工具 git
git如何不上传指定的文件或文件夹
【7月更文挑战第9天】平时写代码的时候有很多测试文件或者静态文件,没必要上传到git上,不仅占资源更新还麻烦,以下介绍如何忽略不需要上传的文件或文件夹。
1099 8