Github - 文件 XYZ 大小为 126.80 MB,超过了 GitHub 的文件大小限制 100.00 MB。

11
我有一个本地仓库,不小心添加了一个大文件。现在我差不多落后了100个提交。当我尝试推送到GitHub时,它会给我一个错误。
我需要帮助做任何必要的事情,以便能够推送这个仓库的剩余部分。
(附注:这是一个带有IPython节点和代码的目录。我有一个自动推送脚本,这就是为什么我落后了近100次提交。我刚刚注意到它没有同步)
以下是我尝试过但没有成功的方法:
git status

分支 master 你的分支领先于 'origin/master' 100 次提交。 (使用 "git push" 发布您的本地提交) 没有要提交的内容,工作目录干净。
git filter-branch --index-filter 'git rm --cached --ignore-unmatch "Education/Coursera/Exploratory Data Analysis/Week1/household_power_consumption.txt"' --tag-name-filter cat -- --all

重写d381c7d5037a6a26abb2b5cef06e57d8b86a398b(95/189)rm 'Education/Coursera/Exploratory Data Analysis/Week1/household_power_consumption.txt'
..
重写f639b57714a5d57ff37b9d4a55c1c69fc0b514a8(176/189)rm 'Education/Coursera/Exploratory Data Analysis/Week1/household_power_consumption.txt'
重写587c8b65f19315ebeb6627a75bd703a5dbdec208(189/189)

Ref 'refs/heads/master'已被重写
警告:Ref 'refs/remotes/origin/master'未更改

git rm "Education/Coursera/Exploratory Data Analysis/Week1/household_power_consumption.txt"

致命错误:路径规范“Education/Coursera/Exploratory Data Analysis/Week1/household_power_consumption.txt”没有匹配到任何文件。
git push

警告:push.default未设置;其隐含值将从Git 2.0中的“matching”更改为“simple”。要消除此消息并在默认更改后保留当前行为,请使用: git config --global push.default matching 要消除此消息并立即采用新行为,请使用: git config --global push.default simple 当push.default设置为“matching”时,git将将本地分支推送到已存在同名的远程分支。 在Git 2.0中,Git将默认采用更加保守的“simple”行为,该行为仅将当前分支推送到“git pull”用于更新当前分支的相应远程分支。 有关详细信息,请参见“git help config”,然后搜索“push.default”。 (“simple”模式是在Git 1.7.11中引入的。如果您有时使用较旧版本的Git,请改用类似模式“current”而不是“simple”) 计数对象:841,完成。 使用最多2个线程进行增量压缩。 压缩对象:100%(578/578),完成。 写入对象:100%(835/835),31.79 MiB | 3.14 MiB/s,完成。 总共835个(增量196),重复使用0个(增量0个) 远程:警告:文件.git-rewrite/t/Education/Coursera/Exploratory Data Analysis/Week1/household_power_consumption.txt为74.92 MB;这大于GitHub建议的最大文件大小50.00 MB 远程:警告:文件.git-rewrite/t/Education/Coursera/Exploratory Data Analysis/Week1/household_power_consumption.txt为69.38 MB;这大于GitHub建议的最大文件大小50.00 MB 远程:错误:GH001:检测到大型文件。 远程:错误:跟踪:f013f5e75b4f35d07de5d2d9ef1116bd 远程:错误:有关更多信息,请参见http://git.io/iEPt8g。 远程:错误:文件.git-rewrite/t/Education/Coursera/Exploratory Data Analysis/Week1/household_power_consumption.txt为126.80 MB;这超出了GitHub的文件大小限制100.00 MB 对于git@github.com:rbohac/IPython-Notebooks.git ![拒绝推送]主人->主人(预接收钩子被拒绝) 错误:无法将某些引用推送到'git@github.com:rbohac/IPython-Notebooks.git'

这里还有一个可能的重复问题:GIT通过推送大文件时出现问题 - user9869932
你的问题已经很有帮助了,对我来说你的git filter-branch命令解决了问题。所以非常感谢你。 - Hi_its_me
3个回答

10

确保你的最新提交是正确的,因为BFG会假设这一点,并在重写和清理Git历史时使用你的最新提交来维护你的仓库状态。BFG类似于“git-filter-branch”,但它是为更具体的目的编写的实用程序,而git实用程序则更广泛,功能更多,但效率较低。有关详细信息,请阅读BFG文档,因为我从那里获得了所有这些信息。

brew install bfg
bfg --strip-blobs-bigger-than 50M
git rm --cached XYZ
git commit --amend -CHEAD
git push

BFG会更新您的提交以及所有分支和标签,使它们变得干净,但它并不会实际删除任何内容。检查存储库以确保一切正确,然后清除缓存并运行“git gc”以剥离不需要的数据,因为Git现在已经将其从历史记录中删除。

更多信息:


尝试使用BFG: `ubuntu@ip:~$ java -jar bfg-1.12.3.jar --strip-blobs-bigger-than 50M --no-blob-protection IPythonNotebooks/.git使用repo:/home/ubuntu/IPythonNotebooks/.git扫描大型blob的packfile在8毫秒内完成。 警告:在packfiles中没有符合条件的大型blob - 是否需要打包repo? 请为BFG指定任务: bfg 1.12.3` - rbohac
Nathan,我对我的回答进行了一些详细的阐述,但我只是从bfg的文档中获取了所有信息。请阅读他们的文档以获取更多详细信息。 - davidcondrey

5

我在使用homebrew安装bfg时遇到了问题,尽管我通常使用homebrew都很成功。

以下方法适用于我:

  • Download the latest bfg from https://rtyley.github.io/bfg-repo-cleaner/#download

  • Execute bfg like this, then enter the rest of the commands @davidcondrey recommends

    cd /my/repo
    java -jar ~/Downloads/bfg-1.12.5.jar --strip-blobs-bigger-than 99M
    git rm --cached XYZ
    git commit --amend -CHEAD
    git push 
    

1
这对我有用:git rm --cached XYZ git commit --amend -CHEAD git push origin master - matthieu lieber
@Justin Schier,你能否解释一下这个做法的原因以及为什么它有效? - Prakhar Agrawal

0

另一种不使用bfg的解决方案,我使用了Bruno Grande开发的remove-big-file.sh脚本。

在执行之前,请阅读脚本并理解每个步骤

简要说明:它考虑了本地rebase,编辑您包含大文件的提交(从git中删除而不是物理删除),并amend提交,最后推送(这将包括您尝试修复后完成的任何其他提交)。

我遇到了同样的问题,我的方法是:从git中删除文件,并更新我的.gitignore并提交这些更改,但仍然面临相同的错误。手动执行脚本的每个步骤后,问题得到了解决,请注意,推送将包括您在本地完成的所有提交。


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