因为我已经删除的大文件,无法推送到GitHub
目前我有
- 空的GitHub回购
- SSH服务器回购(主)
- 本地回复
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
提示 :
- 列表项目
- 我只是select
drop
包含大文件的提交。 - 你可能会遇到冲突期间rebase修复他们,并使用
git rebase --continue
– 继续直到你完成它。 - 如果在rebase使用
git rebase --abort
取消它时git rebase --abort
了。