Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git阻止推送,因为文件太大,已被删除_Git_Branch - Fatal编程技术网

git阻止推送,因为文件太大,已被删除

git阻止推送,因为文件太大,已被删除,git,branch,Git,Branch,我在git存储库(即我通过git命令行工具推送到的GitHub repo)方面遇到了问题 这是一个Rails应用程序。它实现的功能之一是下载.zip文件。。。根据设计,它们被创建并临时存储在服务器(localhost)上。问题是自动删除尚未实现。因此,由于“服务器”上的.zip文件大小约为120MB,我决定git add-A,git commit-m“blablabla”和git push。推送花了很长时间,最后出现了一条错误消息,内容是“文件太大,推送中止” 那天我放弃了推送,而是删除了有问题

我在git存储库(即我通过git命令行工具推送到的GitHub repo)方面遇到了问题

这是一个Rails应用程序。它实现的功能之一是下载.zip文件。。。根据设计,它们被创建并临时存储在服务器(localhost)上。问题是自动删除尚未实现。因此,由于“服务器”上的.zip文件大小约为120MB,我决定
git add-A
git commit-m“blablabla”
git push
。推送花了很长时间,最后出现了一条错误消息,内容是“文件太大,推送中止”

那天我放弃了推送,而是删除了有问题的文件。接下来的几天我继续工作,打开了一个新的分支,签回分支主,尝试添加->提交->推送,但是。。。关于超过.zip文件大小的错误消息仍然存在

怎么回事


请帮帮我

当您运行
git add时;git提交
,然后git将zip文件添加到本地存储库中。即使您删除了本地文件,git仍将其保存在repo中,因为它保留了所有提交文件的副本

由于您已经将该文件提交到本地git repo,因此需要将其从历史记录中删除,然后才能推送。为此,请遵循以下答案:

答案归结为运行
git过滤器分支
,然后删除原始分支。请记住将giantfile.zip替换为巨型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

你是按http还是ssh/git推送的?我想是通过https。。。我使用git命令行实用程序。这将如何影响我的问题?根据远程存储库的不同,post(推送)大小可能有限制。使用SSH/GIT没有限制。无论您使用cli还是gui,这都取决于远程orgin url。请参阅了解更多信息,每个答案下都有一个共享链接。您可以使用它来获取一个链接,该链接指向一个最适用于这种情况的答案。此外,在这里引用一些答案,然后对其进行调整(如果可以使其更适用于这种特定情况),这不是一个坏主意。您认为在尝试之前最好创建一个新分支,以防出现问题吗?这会影响整个存储库还是只影响一个分支?我上面给出的
git过滤器分支将从repo中的所有分支(和提交)中删除该文件。至于万一出现问题,的文档建议在运行
git update ref
部分之前备份repot,或者使用
git clonefile:///path/to/repo
因为这将克隆不带删除文件的回购协议,但您的原始文件仍将在ref/original/中保持完整。谢谢!这很有帮助。