使用 BFG Repo-Cleaner 从 GitHub 存储库中删除过去提交的文件

Removing files from past commits in GitHub repository with BFG Repo-Cleaner

我的 GitHub 存储库中有一个文件,我想将其从之前的提交中删除。我使用了 BFG Repo-Cleaner 的 delete-files 命令,它似乎可以工作,但是当我继续我的 GitHub 存储库时,该文件仍在所有以前的提交中。如果我再次尝试执行命令,它会给我一个

BFG aborting: No refs to update - no dirty commits found??

我是不是误解了 BFG 的工作原理?如果是这样,我如何从我过去在 GitHub 的提交中删除文件?

以下是我采取的步骤:

  1. 使用 --mirror 标志将我的 GitHub 存储库的副本克隆到本地文件夹中。
  2. 然后我 cd 我的本地 visual studio 项目。
  3. 然后我输入命令java -jar bfg-1.12.1.13.jar --delete-files <.json file I wanted to delete> <my local clone copy from step 1>.git
  4. 然后我输入了git reflog expire --expire=now --all && git gc --prune=now --aggressive
  5. 运行 git push

单独使用 git push 是行不通的,因为 BFG repo cleaner 确实重写了回购的历史记录。

当您使用 --mirror 克隆(就像您所做的那样)时它应该可以工作,因为在 git push 上,本地更新的引​​用将在远程端强制更新。

注意:

By default the HEAD branch is protected, and while its history will be cleaned, the very latest commit (the 'tip') is a protected commit and its file-hierarchy won't be changed at all.

在返回之前,不要忘记从 HEAD(当前工作树)中删除文件。

discussion 之后,命令似乎没有在正确的文件夹中执行。该文件夹应以 .git 结尾:xxx.gitclone --mirror 是一个裸仓库。

跳过你的步骤中的第 2 步,它应该可以工作(不要 cd 进入你的 <repo-name>.git)。

您需要从包含文件夹 <repo-name>.git 的文件夹中 运行 BFG。 BFG 正在工作目录中寻找名为 <repo-name>.git 的文件夹。这就是为什么它没有改变任何东西。