学堂 学堂 学堂公众号手机端

企业级项目清除.git缓存

lewis 1年前 (2024-05-09) 阅读数 17 #技术

在企业开发的过程中,难免会遇到把一些非常大的文件(如编译后的二进制文件、jar包等)误传到git项目上,导致整个项目变得非常大,在企业自动化CI/CD的流程中的git clone 以及 git fetch等操作会明显变慢。

git仓库下有一个名为 .git 的隐藏文件夹 ,从git初始化(git init)开始,所有仓库的变化都会记录在这个.git文件夹中;只要是git记录的文件(add 并且 commit),就会通过一定的算法保存到这里, 删除一个文件,只是记录了删除这个操作,但并不会把文件从.git文件夹删除。 所以直接删除项目中的文件,.git文件夹完全不会变小(理论上还会变大一点,因为多记录了一次删除操作)


要想解决这个问题,需要重写涉及大文件提交的commit记录来达到清除.git缓存的目的,核心命令如下:

git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch your-file-name' --tag-name-filter cat -- --all

但是经实际使用发现,该命令清理速度比较缓慢,且推送至远程仓库不会生效,查找各种资料也没有发现合适的解决方法,最终选择一个高效的清理工具​​bfg​​来解决这个问题。

清理步骤:

1.镜像模式克隆项目(假设项目的镜像文件夹为lem.git)

git clone --mirror 项目地址

2.使用bfg命令清理项目的镜像文件夹

java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 10M lem.git

3.关闭gitlab受保护的分支

4.进入镜像文件夹,清理本地缓存

cd lem.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive

5.推送项目的镜像文件夹

git push

bfg清理工具:​​https://rtyley.github.io/bfg-repo-cleaner/​​


版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门