永久删除大文件

  1. 从你的资料库中清除文件
 git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all

其中, path-to-your-delete-file 就是你要删除的文件的相对路径(相对于git仓库的根目录), 替换成你要删除的文件即可. 注意一点,这里的文件或文件夹,都不能以 ‘/’ 开头,否则文件或文件夹会被认为是从 git 的安装目录开始。

如果你要删除的目标不是文件,而是文件夹,那么请在 git rm 命令后面添加 -r 命令,表示递归的删除(子)文件夹和文件夹下的文件,类似于 rm -rf命令。

  1. 推送我们修改后的repo
 git push origin master --force --all

为了能从打了 tag 的版本中也删除你所指定的文件或文件夹,您可以使用这样的命令来强制推送您的 Git tags:

$ git push origin master --force --tags
  1. 清理和回收空间
    虽然上面我们已经删除了文件, 但是我们的repo里面仍然保留了这些objects, 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间.
rm -Rf .git/refs/original

rm -Rf .git/logs/

git reflog expire --expire=now --all

git gc --prune=now
git gc --aggressive --prune=now

## 看看文件是不是变小了
git count-objects -v

【如何删除 git 历史里的大文件】

1)使用如下的命令找出历史上的大文件。引用:https://stackoverflow.com/questions/10622179/how-to-find-identify-large-commits-in-git-history

git rev-list --objects --all |
  git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' |
  sed -n 's/^blob //p' |
  sort --numeric-sort --key=2 |
  cut -c 1-12,41- |
  $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

2)使用 bfg -D <文件名>,直接删除。引用:https://docs.github.com/en/authentication/keeping-your-account-and-
data-secure/removing-sensitive-data-from-a-repository

3)根据 bfg 提示执行
git reflog expire --expire=now --all && git gc -- prune=now --aggressive
4) 推上 Github

 git push -f 

在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐