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

猜你喜欢

转载自blog.csdn.net/Prepared/article/details/114973347