git删除大文件怎么办?BFG帮你忙
谁掌控了过去谁就掌控了未来
前言
在折腾博客的头图的时候,不小心将很大的,而且用不上的图片放在了git的提交历史里面。昨天还没想到有啥问题,虽然出现了问题的征兆,就是上传到服务器的时候速度很慢。不过我硬是靠设置 git
的postBuffer
为500M而强行解决了问题。但今天突然想起这个问题,仔细思考了一下,不对啊,git 的特性决定了你提交了什么东西,他就会永远留在 git 仓库里面呀,那这个样子岂不是很不妙?
于是我上网搜了下 git 的工作机制,发现还真是这样,这个怎么办?于是再搜了下,发现 git 早已对此有了预案,那就是git filter-branch
命令。不过看了官方的文档也没看出来该怎么用,试了下也没折腾出来,本来以为凉了,不过还好在Github的相关网页看到了还有别的工具,那就是本文的重点介绍 BFG
BFG的使用
就先把BFG的官方网站放出来吧,点这里。
需要注意的是,该工具是.jar格式的,也就是说你得安装一个java才能运行。虽然我学了java,但对这个一窍不通,所以也没啥好说的,去官网下一个就行了。不过因为 Windows 的原因,所以得注销一下java才写进环境变量,具体的我在建站心得
里面说过有兴趣的可以去看看。
那么开始正文吧
删除大于10M的文件
我们现在假设~
代表你的hexo博客的主目录,那么我们到~\.deploy_git
里,把你在官方网站下的bfg-1.13.0.jar
之类格式的文件拖到这个里面,打开终端输入命令
1 |
|
这个的意思是删除大于git仓库中大于10M的文件。当你看到如下的提示的时候,就说明成功了。
1 |
|
不过就像他所提示的那样,还要再做点动作才能正式删除那就跟着他做呗。不过Windows下的命令貌似不支持用&&连接两条,所以就分开做吧。
1 |
|
现在就好了,彻底删除了大于10M文件,改写了提交的历史。现在你可以看看.deploy_git
这个文件夹是不是比之前小了很多啊。
举一反三一下,把之前命令的10M
换成50M
也是可以的。
不过每次都输 .\bfg-1.13.0.jar
也太麻烦了,就算按Tab自动补全也是,还是把bfg-1.13.0.jar
的名字改成bfg.jar
吧。
删除指定名字的文件
BFG还有一个用法就是删除指定名字的文件
1 |
|
这里把你要删的文件名替换那个YOUR FILE NAME
就好了,当你和上面一样看到
1 |
|
这样的提示的时候,说明就工作完成了,和之前一样输入两行命令删除掉他吧。
1 |
|
其他我没用过的指令
看官方网站的Usage的话会发现其实还有些其他用法,不过我没用过,就在这里也一并列出来吧
替换指定文件的所有内容
替换你的仓库里出现的文件中列出的所有密码(如果需要,请在前缀行’regex:’或’glob:’)处替换为 REMOVED
Replace all passwords listed in a file (prefix lines ‘regex:’ or ‘glob:’ if required) with REMOVED wherever they occur in your repository :
1 |
|
删除所有名为.git
的文件夹
删除所有名为“ .git”的文件夹或文件-Git中的保留文件名。 当从Mercurial等其他源代码控制系统迁移到Git时,这些通常会成为问题:
Remove all folders or files named ‘.git’ - a reserved filename in Git. These often become a problem when migrating to Git from other source-control systems like Mercurial :
1 |
|
用了谷歌娘机翻,也润色了一点,实际的使用的话还是去网上找实例看看吧。
顺便上面的那个 bfg
就替换成java -jar .\bfg.jar
吧,Windows平台的话。
有趣的事
现在是 2020/3/3 可能美国正在进行大选或者川普现在有啥丑闻?
总之我清理完了后bfg
会弹出这么一个提示
1 |
|
不知道你用的时候会有这个提示么?
参考文章
使用BFG Repo-Cleaner清除git的历史错误提交
Git 工具 - 重写历史
an alternative to git-filter-branch