git - 无法推送到 GitHub,因为我已经删除了大文件

标签 git github git-push

目前我有

  1. 清空 GitHub 存储库
  2. SSH 服务器库(主要)
  3. 本地 repo

SSH 服务器存储库是最新的存储库(生产站点),所以我从那里做了一个 Git 克隆到本地。然后我尝试向 GitHub 执行 git push

一切顺利,但后来它说 filename.gz 对于 GitHub 来说太大了。我不需要这个文件,所以我运行了几个 Git 命令将它从 Git 缓存中删除,然后推回到 SSH 服务器。

我在本地看不到大文件,但它仍在 SSH 服务器上,即使 git diff 什么都不返回并且 git push 返回“一切都是最新的”- 即使文件当我尝试推送到 GitHub 时在本地存储库中不可见我仍然收到错误

remote: error: File fpss.tar.gz is 135.17 MB; this exceeds GitHub's file size limit of 100 MB

我按照“解决问题”listed on GitHub help 下的步骤操作那还不够吗?

当文件不在本地或不在 git status/diff/push 中时,文件如何仍在以太中?

最佳答案

你可以使用

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD

这将删除该文件历史记录中的所有内容。问题是该文件存在于历史记录中。

此命令会更改您提交的哈希值,这可能是一个真正的问题,尤其是在共享存储库上。在不了解后果的情况下不应执行此操作。

编辑:git 项目现在建议用户使用git filter-repo 而不是git filter-branch


使用git filter-repo

WARNING: git-filter-branch has a glut of gotchas generating mangled history
         rewrites.  Hit Ctrl-C before proceeding to abort, then use an
         alternative filtering tool such as 'git filter-repo'
         (https://github.com/newren/git-filter-repo/) instead.  See the
         filter-branch manual page for more details; to squelch this warning,
         set FILTER_BRANCH_SQUELCH_WARNING=1.

安装

[brew|pip3|...] install git-filter-repo

用法

要删除带有路径前缀 example/path/to/something 的任何文件,您可以运行

git filter-repo --path example/path/to/something--invert-paths

要删除任何没有路径前缀 example/path/to/something 的文件,您可以运行

git filter-repo --path example/path/to/something

关于git - 无法推送到 GitHub,因为我已经删除了大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19573031/

相关文章:

git - 删除 SourceTree 中的等待推送

git - 如何在 2.27+ 中使用 git sparse-checkout

git bundle 警告 ref 被 rev-list 选项排除

git - 将问题从 Bitbucket 转移到 Github

git - Heroku 管道升级 - pull 到存储库

git - 远程源已存在于 'git push' 到新存储库

git - 在 Visual Studio 2015 中将 WinMerge 设置为差异/merge 工具

git - 将 Git Feature 分支 merge 到 "Beta"分支的问题(在它已经 merge 到 "Develop"分支之后)

git - git 是什么意思, "unable to migrate objects to permanent storage"?

git 在推送时挂起