目前我有
空的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 status
在此之后,您应该会看到类似于
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
重要的部分是“2次提交”!从这里,继续输入:
git reset HEAD~<HOWEVER MANY COMMITS YOU WERE BEHIND>
所以,对于上面的例子,你可以输入:
git reset HEAD~2
在你输入之后,你的“git状态”应该是:
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
从那里,您可以删除大文件(假设您还没有这样做),并且您应该能够重新提交所有内容而不会丢失您的工作。
我认为这是因为您删除的文件可能已经存在于您的提交,以检查这个第一次使用
git log
这将返回你在当前分支中提交的列表,找到你要找的提交的id,
然后使用,
git show <commit_id>
这应该显示包含文件的提交细节
现在要解决你的问题,使用
git reset --soft HEAD~1
这里HEAD~1上的1代表之前的提交,你可以根据你需要的提交使用不同的数字。
如果你需要第二次最后提交,请使用git reset -soft HEAD~2
这将重置你的Head到以前的提交,如果这个提交没有大文件,那么你可以这样做,
git add .
git commit -m <message_for_commit>
git push origin <repo_name>
else
如果你想重置到一个不包含你的文件的特定提交,只需使用
git reset --soft <commit_id>
然后从这里创建一个新的提交,删除文件并推送它
我遇到了类似的问题,并使用上面的步骤删除文件。它工作得很完美。
然后我得到了一个错误的第二个文件,我需要删除:
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来修复这个问题
在那之后,推力通过了!