搜尋

首頁  >  問答  >  主體

因累積太多無法提交 github,如何清除歷史變更記錄?

如題,累積有半年沒 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 後再來續寫。

某草草某草草2795 天前651

全部回覆(2)我來回復

  • 伊谢尔伦

    伊谢尔伦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
    

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-02 09:33:58

    rebase,push的時候-f

    回覆
    0
  • 取消回覆