使用git 時 遇到大于50M的文件時的處理

項目使用的git進行版本控制,在上傳時因為編譯器自動生成了一個bin文件大于100M而使git報錯;

錯誤如下:

Total 1323 (delta 522), reused 0 (delta 0)

remote: warning: Large files detected.

remote: warning: File MyluaTest/runtime-src/proj.android/obj/local/armeabi/libcocos2dlua.so is 54.39 MB; this is larger than Git@OSC's recommended maximum file size of 50 MB

remote: error: File MyluaTest/runtime-src/proj.win32/Debug.win32/MyluaTest.pdb is 112.75 MB; this exceeds Git@OSC's file size limit of 100 MB

remote: error: hook declined to update refs/heads/master

To https://git.oschina.net/.../....git

! [remote rejected] master -> master (hook declined)

error: failed to push some refs to 'https://git.oschina.net/..../.....git'

出現警告是文件大于50M ?出現錯誤是文件大于100M。

解決辦法:

如果文件只commit過一次(沒有重復commit),并且沒有上傳:

1. ?cd 項目目錄;(切換到項目目錄)

2. ?git rm --cached file(file是要移除的文件)

3. ?git commit --amend -CHEAD,

執行完最后一步后,這個大文件將會從你的commit記錄里移除,并且以后commit都將不會再把它commit了,這時候就可以git push把本地代碼push上了

注意:這里可能遇到輸入文件路徑命令后說找不到你要刪除的文件的問題,出現這個問題的原因是你要刪除的文件路徑名沒寫對,一定要仔細檢查,確保要刪除的文件的路徑是正確的。

如果文件多次commit上傳:

如果做了這幾步你push的時候還是報和開始的時候一樣的錯,那說明這個文件你不是最近一次commit時添加的,而是在之前commit過很多次了,這就需要把關于這個文件的所有歷史commit記錄全部清除掉,這時候我們就需要用到一個叫BFG的工具。我們要到https://rtyley.github.io/bfg-repo-cleaner/#download這個網站去下載并學習如何使用這個工具。首先先得把這個軟件下載下來,雙擊它,如果你的電腦沒有java的SDK,按照提示安裝好,否則BFG將運行不了。好了之后,我們要cd進BFG文件所在目錄,

第一步輸入命令$ java -jar?bfg.jar?--strip-blobs-bigger-than 100M some-big-repo.git(帶刪除線的分別是:BFG工具的名字,要處理文件的大小,文件的路徑),

第二步cd some-big-repo.git,(切換到文件路徑)

第三步git reflog expire --expire=now --all && git gc --prune=now --aggressive,

第四步git push,

到此大功告成。你的commit歷史里所有大于50M的文件的commit全部被清除,這樣你就可以push到github上了。

注意:這里可能遇到輸入命令java -jarbfg.jar--strip-blobs-bigger-than100Msome-big-repo.git后bfg運行不成功的問題,原因是java -jar bfg.jar這個命令必須要在bfg.jar所在目錄下運行才行,否則系統將不知道bfg.jar文件在哪里,所以執行不成功。所以我們要先cd到bfg.jar所在目錄,然后在執行java -jarbfg.jar--strip-blobs-bigger-than100Msome-big-repo.git命令。對于不熟悉命令行的人來說最容易犯這些錯誤了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容