【软件构造】记录一次 github 不小心 commit 了本来不需要上传的大文件导致 push 失败的解决办法

      头一次写博客不知道应该怎么写就假装自己是在写日记吧x

      就在刚刚结束的软构lab5实验中,天水(我)在试图提交35分支的时候直接git add *,忘记我把导出的 heapdump 文件也存在了目录下,导致commit了一次大文件,结果在push的时候无法上传。经过不懈的查找网上博客和求(sao)助(rao)各位大佬,终于成功把代码传上去了QAQ(感动.jpg)。

      周一的时候一直上传失败但是当时没搞清楚是为什么也不知道怎么解决导致多用了一个free late days我会说吗。。。

      当时上传失败的提示是这样的:

fatal: The remote end hung up unexpectedly 

      于是上网查了一下,发现是由于历史提交过某一个大文件的大小超过了git的限制,于是上传失败。

      我当时试图删掉本地一些不必要上传的文件然后想着重新commit一次再push不就可以了吗。(然而事实证明我真的是太天真了qaq)

      删完了之后依旧是熟悉的失败提示(QAQ)。询问大佬之后大佬表示:因为你已经commit过了啊,之后就算重新commit了之前的记录还在,你 push 的时候还是会把之前的 commit 记录一起 push 上去所以那个文件还是会被传上去。

      接下来大佬建议我直接建一个新的分支,然后把内容交上来,再把旧分支删掉,然后把新分支重命名一下。然鹅愚蠢的天水没有按照大佬的建议行动,这是因为之前我第一个分支(31ManualChecking)命名错了(字母大小写打错了。。。不过后来大家告诉我git不区分大小写。。。),而我当时试图重命名的操作过于复杂,不想再弄一次了。

      (然鹅事实证明这样可能会简单很多)

      首先尝试使用 git rm --cached 指令试图删除暂存区的文件结果失败了。

      接下来我在博客上看到了一个解决办法是修改git上传的大小限制,可以将上传文件的大小限制改为500M,而我那个文件大概是一百M多,感觉可以,于是进行了一波尝试:

git config --global http.postBuffer 524288000

      修改完了再次试图上传发现还是不行,然后又看到另一个指令,大概是创建一个变量然后设置为 false,这个指令是我在搜上传失败那个提示时看到的所以虽然不确定作用还是试了一下然后我现在找不到那个指令了QAQ我个智障

      然后不出意料的依旧不好使。。。(而且这两个config变量的设置导致了后来的一系列麻烦 )

      然而天水并没有放弃!(毕竟传不上去实验改没分了啊qaq)  试图查找修改commit历史的方法,把大文件的commit记录删掉。

      参考了这篇博客的方法:https://blog.csdn.net/HappyRocking/article/details/89313501

      首先使用指令查看到底是哪几个文件占有最多的内存(显示的是前十个):

git rev-list --all | xargs -rL1 git ls-tree -r --long | sort -uk3 | sort -rnk4 | head -10

      然后我发现前十个有八个都是 heapdump 相关的文件还有两个是这次实验的那两个大数据文本。于是使用下面这个指令修改commit历史(其中filepath是上一个指令查出来的 heapdump 的文件夹地址):

git filter-branch --tree-filter "rm -f {filepath}" -- --all

      其实理论上到这里就应该可以了,但是我发现我还是传不上去,以为是上面的指令用错了,于是查找了其他的修改指令:

git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch big-file.jar' --prune-empty --tag-name-filter cat -- --all

      但是依旧不行。。。而且我发现这次试图 push 时 writing objects 的大小已经不是之前的200M了,只有二十多M。。。而且writing objects 之后也显示了done 然后显示 Total 多少 refused 0 之类的。但是进行到这一步就卡住了!!!也不会显示 fatal ,就是单纯的卡住了什么的不再显示,去网上找也没有看到一样的情况。

      (绝望.jpg)

      这个时候就无比感谢另一位大佬!!!他任务可能是我之前自己设置的那两个 config 变量出的问题,所以建议我把那两个变量改回去试试。

      查看 config 的各种指令发现了一个 unset 指令:

      它的作用是移除掉某个变量。把之前的 postBuffer unset 掉 然后再次尝试 push 结果这次居然成功了!!!!

      开心炸裂!!!

      所以说这个故事告诉我们不要瞎尝试x(尤其是在 ddl 前很容易崩啊!!!)

      最后感谢所有帮助我的大佬♪(・ω・)ノ 鞠躬.gif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值