Git 尝试推送既不在回购也不在缓存中的超大文件
Git tries to push oversized files that are no longer in repo nor in cache
总结: 我做了一个包含超大文件的 git 提交,并且在尝试推送时遇到了可怕的“大文件”错误。我重组了 repo 以拥有一个不再包含任何大文件的新顶级目录,但在尝试推送时我仍然遇到“大文件”错误。我尝试了各种常见的解决方案(如下),但 git 一直在尝试推送新顶级存储库之外的文件。
我所做的详细信息:
我手动删除了 .git 和 .gitignore 文件到我想要的新目录,如 here.
所述
通过git rev-parse --show-toplevel
确认新根目录成功识别。
我再次尝试推送到远程 (git push origin main
),但出现错误 File <filepath> is 102.90 MB; this exceeds GitHub's file size limit of 100.00 MB
,其中 <filepath>
是旧目录中的路径,不是新的。
我试图通过 git rm -r --cached <filepath>
从缓存中删除文件(如已接受的答案 here 中所述),但是
这会产生错误 fatal: <filepath> is outside repository
.
我通过git reset HEAD~
重置,然后再次尝试推送,但我得到了与上述相同的错误。
我试图通过 git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch stitched.csv' HEAD
过滤分支历史记录以删除涉及大文件 (stitched.csv
) 的提交,如 here 所述。然后我再次尝试推送,仍然出现同样的错误,再次参考 stitched.csv
.
实际上,我有很多超大文件,所以我真的不想手动从缓存中删除每个文件。自从涉及大文件的那些以来,我做出了许多好的承诺。
如有任何帮助,我们将不胜感激。
如评论所述,您需要从 Git 历史记录中过滤并删除那些大文件。
最近的选项现在是 third-party tool git filter-repo
(with its installation process,并使用 Python)
为了不必列出每个大文件,您可以确定一个大小,超过该大小您希望删除任何 个文件:
git filter-repo --strip-blobs-bigger-than 2M
将“2M
”(两个Mo)替换为合适的大小:见“How to find the N largest files in a git repository?”。
总结: 我做了一个包含超大文件的 git 提交,并且在尝试推送时遇到了可怕的“大文件”错误。我重组了 repo 以拥有一个不再包含任何大文件的新顶级目录,但在尝试推送时我仍然遇到“大文件”错误。我尝试了各种常见的解决方案(如下),但 git 一直在尝试推送新顶级存储库之外的文件。
我所做的详细信息:
我手动删除了 .git 和 .gitignore 文件到我想要的新目录,如 here.
所述通过
git rev-parse --show-toplevel
确认新根目录成功识别。我再次尝试推送到远程 (
git push origin main
),但出现错误File <filepath> is 102.90 MB; this exceeds GitHub's file size limit of 100.00 MB
,其中<filepath>
是旧目录中的路径,不是新的。我试图通过
git rm -r --cached <filepath>
从缓存中删除文件(如已接受的答案 here 中所述),但是 这会产生错误fatal: <filepath> is outside repository
.我通过
git reset HEAD~
重置,然后再次尝试推送,但我得到了与上述相同的错误。我试图通过
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch stitched.csv' HEAD
过滤分支历史记录以删除涉及大文件 (stitched.csv
) 的提交,如 here 所述。然后我再次尝试推送,仍然出现同样的错误,再次参考stitched.csv
.
实际上,我有很多超大文件,所以我真的不想手动从缓存中删除每个文件。自从涉及大文件的那些以来,我做出了许多好的承诺。
如有任何帮助,我们将不胜感激。
如评论所述,您需要从 Git 历史记录中过滤并删除那些大文件。
最近的选项现在是 third-party tool git filter-repo
(with its installation process,并使用 Python)
为了不必列出每个大文件,您可以确定一个大小,超过该大小您希望删除任何 个文件:
git filter-repo --strip-blobs-bigger-than 2M
将“2M
”(两个Mo)替换为合适的大小:见“How to find the N largest files in a git repository?”。