由于已经删除的大文件,无法将代码推送到GitHub

487

目前我有

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

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

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

我在本地看不到这个大文件,但它仍然在SSH服务器上,即使git diff没有返回任何东西,并且git push返回“Everything is up-to-date” - 即使在我尝试推送到GitHub时该文件在本地存储库中不可见,我仍然会收到关于它的错误

remote:error:文件fpss.tar.gz为135.17 MB;这超出了GitHub 100 MB的文件大小限制

我按照GitHub帮助列表中的步骤解决了问题,这不应该足够吗?

当文件不在本地,并且未列在git status/diff/push中时,它仍然存在于以太网中吗?

3
文件仍然存在于历史记录中。你需要销毁历史记录,可能是通过压缩添加和删除该文件的提交来实现。 - Shahbaz
1
@Shahbaz 我按照此网站上列出的“解决问题”步骤操作了...这难道不够吗?https://help.github.com/articles/working-with-large-files - DevKev
1
如果你不在意你的历史记录,那么你可以这样做。但这并不好。你可以创建一个专门用于 Github 的分支,将所有历史记录压缩成一个提交(实际上与你所说的相同,但不会删除其他分支),然后只将该特定分支推送到 Github。稍后,当例如 master 分支中有提交时,你可以挑选所有提交并应用到 Github 分支。(不确定合并是否可行,但如果可以,那就更好了) - Shahbaz
1
全心全意地操你妈,Github。 - Tobias Wilfert
1
我对Github真是心有余悸。 - undefined
显示剩余10条评论
28个回答

0

有时文件会被保留在跟踪历史记录中,请尝试以下步骤:

  1. git commit,如果您看到列出了大文件的create mode,则执行以下操作:
  2. git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch filename' HEAD。 您应该在控制台中看到一堆重写,最后以以下内容结束:

    rm 'filename' 和

    最后一行Ref已被重写。

完成了。


0

在 GitHub 上检查您最后一次提交的 ID,然后使用以下命令:

git reset --soft <commit_id>

我认为这会起作用。谢谢。


0
所以我遇到了一个特殊的情况:我从gitlab克隆了一个仓库,其中包含一个大于100MB的文件,但在git历史记录中的某个时刻被删除。然后,当我添加了一个新的私有github仓库并尝试推送到新仓库时,我遇到了臭名昭著的“文件过大”错误。此时,我已经无法访问原始的gitlab仓库。但是,在我的本地仓库上使用bfg-repo-cleaner,我仍然能够将其推送到新的私有github仓库:
$ cd ~
$ curl https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar > bfg.jar
$ cd my-project
$ git gc
$ cd ../
$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-project
$ cd my-project
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
$ git remote -v # confirm origin is the remote you want to push to
$ git push origin master

-1

我遇到了同样的问题。

为了解决这个问题,我撤销了提交。然后,我逐个重新提交了每个文件。


-1
假设你已经推送了之前的提交,只需删除你的.git文件夹,初始化一个新的仓库,添加远程仓库地址,添加你的文件(不包括被删除的文件),拉取最新代码,切换到新分支,并推送到新分支。

-2
删除仓库并重新开始工作对我有用
与@Shuaibin Chang类似,这些方法对我都没有起作用。我遇到的一个大问题是,我的问题发生在初始的git提交上,所以我无法回退X个提交,因为没有其他提交可以回退。
我去了我想要删除我的损坏仓库并安装一个新仓库的仓库,并执行了以下操作:
- `sudo rm .git` - 这将删除旧的.git仓库,解决你遇到的问题。它可能会询问你是否删除受写保护的文件。如果是,请对每个文件都回答y,在这种情况下可能会有很多文件。 - `git init` - 在旧仓库所在的位置初始化一个新的仓库 - 从这里开始按照你通常创建和推送git仓库的步骤进行操作。

-2

我在第一个答案的基础上添加了一些内容。

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch ' HEAD

这里会有一些来自origin/master的合并冲突。

你的分支和'origin/master'已经分叉, 分别有114个和109个不同的提交。 (使用“git pull”将远程分支合并到你的分支中)

请运行以下命令:

git reset --hard origin/master

它会丢弃我所有已暂存和未暂存的更改,忘记当前本地分支上的所有内容,并使其与origin/master完全相同。


-11

使用以下命令使您的本地代码库与远程代码库匹配(所有本地更改将丢失):

git reset --hard origin/master

然后再次推送。


13
这使我的本地目录中的所有内容都被删除了!!!!!!!!!! - Afagh
@Afagh 请再次阅读“使您的本地仓库与远程仓库匹配”。 - Bishwas Mishra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接