【问题标题】:Completely remove a file from whole git repository从整个 git 存储库中完全删除文件
【发布时间】:2013-05-28 11:16:51
【问题描述】:

在项目中使用 git,我不小心在提交中添加了一个大的 .zip 文件。直到我开始将它上传到 github 时我才注意到。当我注意到时,我点击了ctrl-cgit removegit commit 并再次上传(现在文件未跟踪)。

我知道这不是正确的选择,因为一旦我提交了 .zip,它就会一直保留在 repo 中,直到我恢复提交,但遗憾的是我没有。

现在,当有人尝试从 repo 下载时,需要花费大量时间,有时会产生 git the remote end hung up unexpectedly(我读过可以通过做一些 git config 来解决)并且非常烦人。

我的观点是:有没有办法告诉进一步的 pull/fetch 请求在这个特定的提交版本中忘记了这个特定的文件?

【问题讨论】:

标签: git github git-commit


【解决方案1】:

Github 提供这样的useful help page on removing files。 StackOverflow 上还有其他问题,涵盖了这一点

另见this section of the Pro Git book,那里给出了一个例子:

要从整个历史记录中删除名为 passwords.txt 的文件,您可以 使用 --tree-filter 选项来过滤分支:

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21)
Ref 'refs/heads/master' was rewritten

清理完成后,您还可以尝试git gc 进一步压缩和清理存储库。

【讨论】:

  • 哇,不知道git gc。我的 .git 目录刚刚从 35M 缩小到 20M。
  • 在此之后我该如何提交? @保罗迪克森
  • FWIW,第一个链接(到 GitHub 页面)对我来说似乎是最好的(它使用明显更快的--index-filter;它的命令会影响所有分支和标签(就像问题问的那样) );它提供了相关的警告;它描述了非常有用的删除前和删除后步骤)。
【解决方案2】:

现在有一个名为“BFG Repo-Cleaner”的工具,在 github.com 上提到它可以替代 filter-branch https://help.github.com/articles/remove-sensitive-data/

链接到工具页面https://rtyley.github.io/bfg-repo-cleaner/

【讨论】:

    猜你喜欢
    • 2011-03-28
    • 2011-01-23
    • 1970-01-01
    • 2011-07-30
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多