目前我有
- 清空 GitHub 存储库
- SSH 服务器库(主要)
- 本地 repo
SSH 服务器存储库是最新的存储库(生产站点),所以我从那里做了一个 Git 克隆到本地。然后我尝试向 GitHub 执行 git push
。
一切顺利,但后来它说 filename.gz 对于 GitHub 来说太大了。我不需要这个文件,所以我运行了几个 Git 命令将它从 Git 缓存中删除,然后推回到 SSH 服务器。
我在本地看不到大文件,但它仍在 SSH 服务器上,即使 git diff
什么都不返回并且 git push 返回“一切都是最新的”- 即使文件当我尝试推送到 GitHub 时在本地存储库中不可见我仍然收到错误
remote: error: File fpss.tar.gz is 135.17 MB; this exceeds GitHub's file size limit of 100 MB
我按照“解决问题”listed on GitHub help 下的步骤操作那还不够吗?
当文件不在本地或不在 git status/diff/push 中时,文件如何仍在以太中?
最佳答案
你可以使用
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD
这将删除该文件历史记录中的所有内容。问题是该文件存在于历史记录中。
此命令会更改您提交的哈希值,这可能是一个真正的问题,尤其是在共享存储库上。在不了解后果的情况下不应执行此操作。
编辑:git 项目现在建议用户使用git filter-repo
而不是git filter-branch
。
使用git filter-repo
WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as 'git filter-repo'
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
安装
[brew|pip3|...] install git-filter-repo
用法
要删除带有路径前缀 example/path/to/something
的任何文件,您可以运行
git filter-repo --path example/path/to/something--invert-paths
要删除任何没有路径前缀 example/path/to/something
的文件,您可以运行
git filter-repo --path example/path/to/something
关于git - 无法推送到 GitHub,因为我已经删除了大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19573031/