问题描述
这是我做的步骤:
-
使用以下方法镜像我的存储库:
git clone --mirror git@bitbucket.org:somespace/myrepo.git
-
git rev-list --objects --all \ | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \ | sed -n 's/^blob //p' \ | sort --numeric-sort --key=2 \ | tail -n 10 \ | cut -c 1-12,41- \ | $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest
-
然后我运行
bfg
如下:java -jar bfg-1.14.0.jar --delete-files 'largestFile.log'
-
Deleted files ------------- Filename Git id ------------------------------------------------ largestFile 2015-05-18.log | bbaaa106 (1.3 GB)
-
最后按照上面第 6 步的输出建议,我接下来运行了:
git reflog expire --expire=Now --all && git gc --prune=Now --aggressive
-
那也成功完成了。
现在,在推送之前,我想确保文件确实被删除了。所以我重新运行上面第 3 步中的命令。但其输出仍然在列表中显示 largestFile.log
。
我做错了什么?或者我在这里遗漏了什么?
有人可以解释或指导我吗。
谢谢!
解决方法
精美的手册说如果没有 --no-blob-protection
选项,HEAD 提交保持不变。这是你的问题吗?
默认情况下,BFG 不会修改您在 master(或“HEAD”)分支上最新提交的内容,即使它会清理 之前的所有提交。
那是因为您最近的提交很可能是您 部署到生产,并简单地删除私有凭证或 大文件很可能导致损坏的代码不再具有 它期望的硬编码数据 - 你需要解决这个问题,BFG 不能 为你而做。一旦你提交了你的更改 - 以及你最新的 提交是干净的,其中没有不需要的数据 - 您可以运行 BFG 对您的所有内容执行简单的删除操作 历史提交
...
如果你想关闭保护(一般情况下,不推荐)>你可以使用--no-blob-protection标志: