我有一个本地存储库,意外添加了一个大文件。现在我差不多100个承诺落后了。当我尝试推送到GitHub时,它给了我一个错误。
我需要帮助做我需要做的任何事情才能推动这个存储库的其余部分。
我不需要此文件,可以永久删除
(旁注:这是一个带有IPython节点和代码的目录。我有一个脚本自动推送它,这就是为什么我差不多100次提交。我只是注意到它没有同步&# 39; d)
git status
在分支主机上 您的分支机构领先于原创/主人。 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'教育/课程/探索性数据分析/ Week1 / household_power_consumption.txt'
..
重写f639b57714a5d57ff37b9d4a55c1c69fc0b514a8(176/189)rm'教育/课程/探索性数据分析/ 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"
致命:pathspec'教育/课程/探索性数据分析/ Week1 / household_power_consumption.txt'与任何文件都不匹配
git push
警告:push.default未设置;它的隐含价值正在改变Git 2.0中的匹配'简单'。要在默认更改后压制此消息并保持当前行为,请使用:
git config --global push.default matching
要压制此消息并立即采用新行为,请使用:
git config --global push.default simple
当push.default设置为'匹配'时,git会将本地分支推送到已存在的同名远程分支。
在Git 2.0中,Git将默认为更保守的“简单”。行为,只将当前分支推送到相应的远程分支“git pull'用于更新当前分支。
请参阅' git help config'并搜索' push.default'了解更多信息 ('简单'模式是在Git 1.7.11中引入的。使用类似模式'当前'而不是简单'如果你有时使用旧版本的Git)
计算物体:841,完成。
Delta压缩使用最多2个线程。
压缩对象:100%(578/578),完成。
书写对象:100%(835/835),31.79 MiB | 3.14 MiB / s,完成。
总计835(delta 196),重复使用0(delta 0)remote:warning:File .git-rewrite / t / Education / Coursera / Exploratory Data Analysis / Week1 / household_power_consumption.txt是74.92 MB;这大于GitHub推荐的最大文件大小50.00 MB
remote:警告:文件.git-rewrite / t / Education / Coursera / Exploratory Data Analysis / Week1 / household_power_consumption.txt是69.38 MB;这大于GitHub推荐的最大文件大小50.00 MBremote:错误:GH001:检测到大文件。
remote:错误:跟踪:f013f5e75b4f35d07de5d2d9ef1116bd
remote:错误:有关详细信息,请参阅http://git.io/iEPt8g remote:错误:文件.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'
答案 0 :(得分:8)
确保您的最新提交是正确的,因为BFG会假设这一点并使用您的最新提交来在重写和清除Git历史记录时维护您的repo的状态。 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将更新您的提交以及所有分支和标记,以便它们干净,但它不会物理删除任何内容。检查repo以确保一切正确,然后清除缓存并运行'git gc'去除Git现在可以识别的不需要的数据,因为它已从历史记录中删除。
答案 1 :(得分:3)
使用brew install bfg
安装后我使用bfg时遇到了麻烦,尽管我通常在使用自制软件时取得了很大的成功。
这对我有用:
执行这样的bfg,然后输入其余命令@davidcondrey建议
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
答案 2 :(得分:0)
另一种不使用bfg
的解决方案,我使用了此脚本remove-big-file.sh
由Bruno Grande开发。
请在执行前阅读脚本,并了解每个步骤
简要说明:它考虑了一个本地rebase,编辑你包含大文件的提交(从git中删除它不是物理上的)和amend
提交并最终推送(这将包括你之后做的任何其他提交)试图解决它。)
我遇到了同样的问题,我的方法如下:我从git中删除了文件,并且还更新了我的.gitignore
并提交了这些更改,但仍然遇到了同样的错误。完成脚本的每一步(手动)后,它就解决了,请注意推送将包括你在本地完成的所有提交。