git删除敏感文件或者大文件

使用场景

1、以前项目中上传了比较大的jar包,使项目比较大,主要是 .git/objects/pack/ 目录下;

在这里插入图片描述

2、上传了敏感信息,比如说数据库密码到git上,需要删除,除了删库的另外一种解决方案

方式一:BFG

下载BFG:https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar

下载项目,注意要使用--mirror

git clone --mirror https://code.prepared.com/test/prepared-test-bigfile.git

把下载下来的jar包,拷贝到项目根目录下;

打开console,执行命令:

java -jar bfg-1.14.0.jar --delete-files test1-3.3.1.jar

test1-3.3.1.jar 替换为自己的文件名;如果不知道哪些文件比较大,可以执行下面的命令,查找大于100M的文件,进行删除

java -jar  bfg-1.14.0.jar --strip-blobs-bigger-than 100M prepared-test-bigfile.git

进入项目中,强制引用该文件的内容过期,并执行垃圾回收

cd prepared-test-bigfile.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive

推送代码,需要有git所有者权限,否则会报错

git push

没有权限的报错信息:

remote: GitLab: You are not allowed to change existing tags on this project.

执行之后的结果:

在这里插入图片描述

另一种方式 git filter-branch

pack-772b716f8d71e2*****60bbd42b.idx这个是自己的文件名,可以在.git/objects/pack目录下查看占用空间比较大的文件明

git verify-pack -v .git/objects/pack/pack-772b********e685060bbd42b.idx | sort -k 3 -n | tail -3

执行这个命令会展示占用空间比较大的几个文件的名字

git rev-list --objects --all | grep 91d11e8ee808********a3001d51fe423e56

输出

项目名/lib/test1-1.0.3.jar
项目名/lib/test2-3.1.0.jar
项目名/lib/test3-2.1.4.jar

删除引用这个jar包的引用

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch 项目名/lib/test1-1.0.3.jar' --prune-empty

之后执行,执行垃圾回收

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

参考链接:

https://rtyley.github.io/bfg-repo-cleaner/

https://docs.github.com/en/github/authenticating-to-github/removing-sensitive-data-from-a-repository

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍六七AI编程

你猜你给我1分我要不要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值