1. 程式人生 > >處理GitHub不允許上傳大於100M檔案問題

處理GitHub不允許上傳大於100M檔案問題

轉載地址:http://www.cnblogs.com/qmmq/p/4604862.html

同樣是記錄一下自己工作遇到的問題,免得下次再遇到了還到處網上查資料解決。

自己的專案的版本控制用的是Git,程式碼倉庫在github託管。專案裡用到了百度導航SDK,由於百度導航SDK有了新版本,於是就更新到了新版本,更新好了之後想把程式碼push到github上,結果出錯了,被拒絕,具體資訊是:Total 3007 (delta 664), reused 0 (delta 0)
remote: error: GH001: Large files detected.
remote: error: Trace: 7b7de6b9372ee392e0f3961b05ea6f33
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File  XXX/XXX/BaiduNaviSDK/libbaiduNaviSDK.a is 102.68 MB; this exceeds GitHub's file size limit of 100.00 MB
To https://github.com/XXX/XXXX.git。意思是有大檔案,更多資訊可到http://git.io/iEPt8g檢視,檔案libbaiduNaviSDK.a的大小超過了GitHub限制的100M大小。想要push,必須把這個檔案移除,可是要怎麼移除呢?開始我是想著直接刪除掉libbaiduNaviSDK.a,結果不行,還是會報上面的錯,於是我又把libbaiduNaviSDK.a放到忽略檔案裡,結果還是不行,還是說有大檔案,報同樣的錯。這下只能老老實實的看官方的解決辦法了,於是就開啟http://git.io/iEPt8g老老實實的研究了一番。大意是說為了便於管理程式碼庫和方便合作伙伴們使用,當你push50M以上的檔案時github將會警告,當push100M以上檔案,就直接拒絕你的push,要想push必須把該檔案從本地倉庫和遠端倉庫全部移除掉。這個移除會永久性的從本地git和github裡移除,如果這個檔案很重要,要記得做一次備份。下面進入具體操作。如果這個檔案是最近一次commit的,並且你還沒有push到github,那麼第一步輸入命令 cd /Users/Dora/Desktop/XXX(cd後面的這個路徑要換成你自己專案的路徑),然後第二步輸入命令 git rm --cached/Users/Dora/Desktop/XXX/XXX/libbaiduNaviSDK.a

(加下劃線部分是你自己的要移除的檔案的路徑),第三步輸入命令 git commit --amend -CHEAD,執行完這步後,這個大檔案將會從你的commit記錄裡移除,並且以後commit都將不會再把它commit了,這時候就可以git push把原生代碼push到github上了。

注意:這裡可能遇到輸入git rm --cached /Users/Dora/Desktop/XXX/XXX/libbaiduNaviSDK.a命令後說找不到你要刪除的檔案的問題,出現這個問題的原因是你要刪除的檔案路徑名沒寫對,一定要仔細檢查,確保要刪除的檔案的路徑是正確的。

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

--strip-blobs-bigger-than 50M my-repo.git(紅色部分是你下載下來的檔案的名字,藍色部分是你需要移除的檔案大小,橙色部分是你自己.git檔案的路徑),第二步cd my-repo.git ,第三步 git reflog expire --expire=now --all && git gc --prune=now --aggressive,第四步git push,到此大功告成。你的commit歷史裡所有大於50M的檔案的commit全部被清除,這樣你就可以push到github上了。這裡只是記錄了怎麼處理遇到的問題,如果想要知道原理,則需要好好好去學習學習。

注意:這裡可能遇到輸入命令java -jar bfg.jar --strip-blobs-bigger-than 50M my-repo.git後bfg執行不成功的問題,原因是java -jar bfg.jar這個命令必須要在bfg.jar所在目錄下執行才行,否則系統將不知道bfg.jar檔案在哪裡,所以執行不成功。所以我們要先cd到bfg.jar所在目錄,然後在執行ava -jar bfg.jar --strip-blobs-bigger-than 50M my-repo.git命令。對於不熟悉命令列的人來說最容易犯這些錯誤了。