2014-09-06 111 views
1

我遇到了一个git仓库(也就是我通过git命令行工具推送的GitHub仓库)的问题。git防止推送,因为太大,已被删除的文件

这是一个Rails应用程序。它实现的功能之一是下载.zip文件......按照设计,它被创建并临时存储在服务器(本地主机)上。问题是自动删除尚未实现。因此,在“服务器”上使用大小约为120MB的.zip文件时,我决定使用git add -A,git commit -m "blabla"git push。推动一直持续下去,最终出现了一个错误消息:“文件太大,推送失败”。

我放弃了推动那一天,而是删除了有问题的文件。我在接下来的几天继续工作,打开了一个新的分支,检查了一下分支主,尝试添加 - > commit - > push但是...关于超大尺寸.zip文件的错误消息仍然存在!

发生了什么事?

请帮我一把!

+0

你是否按http或ssh/git? – Rufinus 2014-09-06 14:33:37

+0

我认为这是通过https ...我使用git命令行实用程序。这会如何影响我的问题? – 2014-09-06 15:04:59

+0

取决于远程存储库,可能会存在邮局(推送)大小的限制。与SSH/GIT没有限制。使用cli或gui并不重要,这一切都取决于远程的orgin url。见http://git-scm.com/book/en/Git-on-the-Server-The-Protocols更多信息 – Rufinus 2014-09-06 23:30:13

回答

3

当您运行git add; git commit时,git将zip文件添加到本地存储库。即使你删除了本地文件,git仍然在回购库中,因为它保留了每个提交的文件的副本。

由于您已将该文件提交到本地git仓库,因此您需要先将其从历史记录中删除,然后才能推送。为了做到这一点,按照这个答案: https://stackoverflow.com/a/2158271/1695439

答案归结为运行git filter-branch,然后删除您的原始分支。请记得用您的巨型zip文件替换文件名为的giantfile.zip。

$ git filter-branch --index-filter 'git rm --cached -r --ignore-unmatch giantfile.zip' --prune-empty --tag-name-filter cat -- --all 
$ git update-ref -d refs/original/refs/heads/master 
$ git reflog expire --expire=now --all 
$ git gc --prune=now 
+0

嗨magikid,在每个答案下是一个共享链接。您可以使用它来获取最适用于这种情况的答案的链接。另外,在这里引用一些这样的答案并不是一个坏主意,然后调整它,如果你能使它更适用于这种特定的情况。 – jmort253 2014-09-06 19:48:08

+0

谢谢你的提示!我已经更新了我的答案。 – magikid 2014-09-06 20:00:47

+0

您是否认为在尝试此操作前最好创建一个新分支,以防万一出现问题?这会影响整个存储库还是仅影响单个分支? – jmort253 2014-09-06 20:03:40