如題,累積有半年沒 push 到 github 了,由於裡面有幾個 jar 沒忽略,越來越多,push 後會報:
Counting objects: 4779, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3903/3903), done.
error: RPC failed; result=56, HTTP code = 200 | 14.92 MiB/s
fatal: The remote end hung up unexpectedlyMiB | 158.00 KiB/s
Writing objects: 100% (4779/4779), 628.84 MiB | 152.00 KiB/s, done.
Total 4779 (delta 2353), reused 3 (delta 0)
fatal: The remote end hung up unexpectedly
Everything up-to-date
搜了一些方法,像什麼換 ssh 之類,都無效,請問有什麼簡單辦法拋棄掉歷史記錄,只把當前的版本 push 上去?
實在沒辦法只好重新 clone 再覆蓋,但線上也有幾百兆,能有什麼命令參數簡單拋棄掉就最好了。
找到一個方法 https://www.kernel.org/pub/software/scm/git/docs/git-filter-branch.html 可以清理歷史,目前正嘗試,OK 後再來續寫。
伊谢尔伦2017-05-02 09:33:58
終於找到簡單的辦法了,用 git 自帶的命令 filter-branch 是可以過濾刪除的,但太慢了,我運行了一整晚還沒結束,卡在 98% 的進度。後來我找到了BFG Repo-Cleaner 這個工具,幾分鐘內就刪除乾淨了,.git 目錄大小由原來的2.9G 左右縮減到70M,刪除過去提交的所有tar.gz,zip,jar,war 等,只留下原始碼,總算能push 到github 了。
具體執行流程為:
bfg --delete-files *.tar.gz # 后面的文件名匹配可换成自己要删除的文件名
git reflog expire --expire=now --all
git gc --prune=now --aggressive
git push --all --force
git push --all --tags --force