在首次提交git仓库或是平时提交git仓库时,可能会不小心把比较大的文件不小心提交了,导致其他人克隆版本或者更新的时候非常慢、甚至卡死;而且即便是把本地的大文件删除并提交了,git的历史记录依然存在,这么做的理由当然是让你能把误删除的文件从某一版本恢复回来,但在前面说的情况下,这个特性是多余的;这个特性我们无法改变,所以只能从其他途径删除这些误提交的文件。
通常这些文件的记录会保存在:.git\objects\pack下,我们无法修改它,但可以通过某些清理工具进行清理。
注意:需要提前装好官方出品的git客户端软件
工具
2.1下载
本次清理采用BFG Repo-Cleaner这个小工具,这个工具只是一个jar包,可以从官网下载:
https://rtyley.github.io/bfg-repo-cleaner/
2.2使用
下载下来的jar包并不需要安装,将其放在某个目录下,例如:
D:\work\git\目录下
随后在该目录下执行git命令,把git仓库下载到该目录,命令如下:
git clone -b 分支号--mirror 你的git仓库路径\xxxx.git
完成后再本地会生成一个以xxxx.git命名的目录。需要注意的是,该目录并不是真正的仓库目录,它仅是仓库的版本控制目录,内容类似:
2.3标记
随后继续在示例目录D:\work\git\下进行操作。
在该目录下执行标记命令,移除不想要的文件,以下是示例命令:
2.3.1.删除所有大于10M的文件
java -jar bfg-1.13.0.jar --strip-blobs-bigger-than 10M xxxx.git
2.3.2.删除所有名为target的目录
java -jar bfg-1.13.0.jar --delete-folders target --no-blob-protection xxxx.git
2.3.3.删除所有以.class结尾的文件
java -jar bfg-1.13.0.jar --delete-files .class --no-blob-protection xxxx.git
注意:最新的bfg要1.8以上jdk才能支持
2.4删除
完成2.3的操作后,需要进入2.2步骤建立的xxxx.git目录下,随后执行命令清除刚才找到的文件(实际上2.3步骤仅是找到需要删除的文件并标记,本步骤才是删除),清理命令:
cd D:\work\git\xxxx.git
git reflog expire --expire=now --all&& git gc --prune=now --aggressive
最后,执行push命令即可:
git push