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

时间:2016-09-24 23:50:10

标签: git github version-control bfg-repo-cleaner

我的GitHub存储库中有一个文件,我想从之前的提交中删除。我使用了BFG Repo-Cleaner的 private void GetHDDdetails() { ConnectionOptions options = new ConnectionOptions(); options.Username = "username"; options.Password = "password"; options.Impersonation = ImpersonationLevel.Impersonate; ManagementScope oMs = new ManagementScope("\\\\remoteHostName\\root\\cimv2", options); ObjectQuery oQuery = new ObjectQuery("SELECT Size FROM Win32_DiskDrive"); ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery); ManagementObjectCollection oCollection = oSearcher.Get(); foreach (ManagementObject obj in oCollection) { hddBox.Text = obj["Size"].ToString(); } } 命令,它似乎可以工作,但是当我继续使用我的GitHub存储库时,该文件仍然在所有先前的提交中。如果我再次尝试执行该命令,它会给我一个

  

BFG中止:没有引用更新 - 没有发现脏提交??

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

以下是我采取的步骤:

  1. 使用delete-files标记将我的GitHub仓库副本克隆到本地文件夹中。
  2. 我然后--mirror到我当地的视觉工作室项目。
  3. 然后我输入了命令cd
  4. 然后我进入java -jar bfg-1.12.1.13.jar --delete-files <.json file I wanted to delete> <my local clone copy from step 1>.git
  5. git reflog expire --expire=now --all && git gc --prune=now --aggressive

2 个答案:

答案 0 :(得分:2)

git push不起作用,因为BFG repo cleaner会重写回购的历史记录。

当您使用--mirror克隆(就像您一样)时它应该有效,因为在git push上,本地更新的引​​用将在远程端强制更新。

请注意:

  

默认情况下,HEAD分支受到保护,并且在清除其历史记录时,最新的提交(&#39;提示&#39;)是受保护的提交,其文件层次结构不会被更改一点都不。

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

discussion之后,似乎命令没有在右侧文件夹中执行。该文件夹应以.git结尾:xxx.gitclone --mirror是一个简单的回购。

答案 1 :(得分:0)

在您的步骤中跳过第2步,它应该有效(不要cd进入您的<repo-name>.git)。

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