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

目前我有

  1. 空的GitHub回购
  2. SSH服务器回购(主)
  3. 本地回复

SSH服务器回购是最新的回购(生产网站),所以我从那里做了一个Git克隆到本地。 然后我试图做一个git push到GitHub。

一切正常,但它说了一些关于GitHub的filename.gz太大了。 我不需要这个文件,所以我运行了几个Git命令从Gitcaching中删除,然后推回到SSH服务器。

我没有在本地看到大文件,但它仍然在SSH服务器上,即使git diff没有返回任何东西,git push会返回“Everything is up-to-date” – 尽pipe当我试图推到GitHub我仍然得到错误

远程:错误:文件fpss.tar.gz是135.17 MB; 这超过了100 MB的GitHub的文件大小限制

我遵循GitHub帮助中列出的 “解决问题”中的步骤,所以不应该这样做吗?

如果文件不在本地,或者在git status / diff / push中列出,文件如何仍然在以太网中?

您可以使用

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

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

如果你在最近的提交中提交了这个文件,那么你可以使用这个 :

 git rm --cached giant_file # Stage our giant file for removal, but leave it on disk git commit --amend -CHEAD # Amend the previous commit with your change # Simply making a new commit won't work, as you need # to remove the file from the unpushed history as well git push # Push our rewritten, smaller commit 

我有一个类似的问题,并使用上述步骤删除该文件。 它工作完美。

然后我得到了第二个文件,我需要删除remote: error: File <path/filename> is 109.99 MB; this exceeds GitHub's file size limit of 100.00 MB remote: error: File <path/filename> is 109.99 MB; this exceeds GitHub's file size limit of 100.00 MB

我尝试了同样的步骤,出现错误: "A previous backup already exists in <path/filename>"

从这个网站的研究,我使用的命令: git filter-branch --force --index-filter "git rm --cached --ignore-unmatch <path/filename>" --prune-empty --tag-name-filter cat -- --all

工作很好,大文件被删除。

令人难以置信的是,推送仍然失败,另一个错误: error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 fatal: The remote end hung up unexpectedly error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 fatal: The remote end hung up unexpectedly

我通过直接修改.gitconfiguration文件 – postBuffer = 999999999

之后,推动通过!

我得到了同样的问题,没有答案为我工作。 我通过以下步骤解决了:

1.查找哪个提交包含大文件

 git log --all -- 'large_file` 

底部提交是结果列表中最旧的提交。

2.find最古老的一个。

 git log 

假设你得到了:

 commit 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32 

3. Git rebase

 git rebase -i 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32 

提示

  1. 列表项目
  2. 我只是selectdrop包含大文件的提交。
  3. 你可能会遇到冲突期间rebase修复他们,并使用git rebase --continue – 继续直到你完成它。
  4. 如果在rebase使用git rebase --abort取消它时git rebase --abort了。