目前我有

空的GitHub回购 SSH服务器恢复(main) 当地的回购

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

一切都很好,但随后它说一些关于文件名。gz对GitHub太大。我不需要这个文件,所以我运行了几个Git命令从Git缓存中删除它,然后推回到SSH服务器。

我没有看到本地的大文件,但它仍然在SSH服务器上,即使git diff返回什么,git推送返回“一切都是最新的”-即使文件在本地回购中不可见,当我尝试推送到GitHub时,我仍然会得到错误

文件fpss.tar.gz是135.17 MB;这超过了GitHub的文件大小限制100mb

我遵循了“修复问题”列在GitHub帮助下的步骤,所以这不应该已经足够了吗?

当它不在本地或在git status/diff/push中列出时,文件如何仍然在以太中?


当前回答

为什么GitHub拒绝我的回购,即使我删除了大文件?

Git存储了你项目的完整历史,所以即使你从你的项目中“删除”了一个文件,Git回购仍然在它的历史记录中保留了该文件的副本,如果你试图推到另一个存储库(比如一个托管在GitHub上的存储库),那么Git要求远程回购具有与本地回购相同的历史记录(即它的历史记录中有相同的大文件)。

我怎样才能让GitHub接受我的回购?

您需要在本地清理项目的Git历史记录,从所有历史记录中删除不需要的大文件,然后只使用“已清理”的历史记录。受影响的Git提交id将会改变。

我如何清理大文件从我的Git回购?

从Git历史记录中清除不需要的大文件的最好工具是BFG Repo-Cleaner——它是一个更简单、更快的Git -filter-branch的替代方案,专门用于从Git历史记录中删除不需要的文件。

仔细按照使用说明,核心部分就是这样:

$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git

任何超过100MB大小的文件(不是最近提交的文件)都将从Git存储库的历史记录中删除。然后你可以使用git gc清除死数据:

$ git gc --prune=now --aggressive

BFG通常比运行git-filter-branch快10-50倍,而且通常更容易使用。

完全披露:我是好心眼巨人回收清理器的作者。

其他回答

我在补充第一个答案。

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

从原点到主节点会有一些合并冲突。

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

请运行这个

Git重置-硬源/主

它将丢弃我所有阶段性和非阶段性的变化,忘记我当前本地分支上的所有内容,并使其与origin/master完全相同。

不知怎的,这对我很管用。我尝试了所有的解决方案,但这个命令节省了我的时间。希望这也能帮助到你。


git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <file/folder path>' --prune-empty --tag-name-filter cat -- --all

请自行承担风险。我不会为你的行为负责。

在根目录下执行该命令

我发现压缩比过滤分支更有用。我做了以下事情:

本地删除大文件。 提交本地删除。 软重置回X次提交(对我来说是3):git重置-软头~3。 然后重新提交所有的更改(AKA squash) git commit -m "合并提交的新消息" 推送压缩提交。

特殊情况(来自用户@lituo):如果上述情况不起作用,那么您可能会遇到这种情况。提交1包含大文件,由于大文件错误,提交1的推送失败。提交2删除了git rm——cached [file_name]的大文件,但提交2的推送仍然失败。您可以遵循上面相同的步骤,但不要使用HEAD~3,而是使用HEAD~2。

我遇到了类似的问题,并使用上面的步骤删除文件。它工作得很完美。

然后我得到了一个错误的第二个文件,我需要删除: remote: error: File <path/filename> is 109.99 MB;这超过了GitHub的文件大小限制100.00 MB

我尝试了相同的步骤,得到一个错误:“以前的备份已经存在于<path/filename>”

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

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

令人难以置信的是,推送仍然失败了,并出现了另一个错误:curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 fatal:远端异常挂起

我通过直接修改.git配置文件- postBuffer = 999999999来修复这个问题

在那之后,推力通过了!

我也有同样的问题。

为了解决这个问题,我取消了提交。然后,我分别重新提交每个文件。