2014-09-06 112 views
1

我遇到了一個git倉庫(也就是我通過git命令行工具推送的GitHub倉庫)的問題。git防止推送,因爲太大,已被刪除的文件

這是一個Rails應用程序。它實現的功能之一是下載.zip文件......按照設計,它被創建並臨時存儲在服務器(本地主機)上。問題是自動刪除尚未實現。因此,在「服務器」上使用大小約爲120MB的.zip文件時,我決定使用git add -A,git commit -m "blabla"git push。推動一直持續下去,最終出現了一個錯誤消息:「文件太大,推送失敗」。

我放棄了推動那一天,而是刪除了有問題的文件。我在接下來的幾天繼續工作,打開了一個新的分支,檢查了一下分支主,嘗試添加 - > commit - > push但是...關於超大尺寸.zip文件的錯誤消息仍然存在!

發生了什麼事?

請幫我一把!

+0

你是否按http或ssh/git? – Rufinus 2014-09-06 14:33:37

+0

我認爲這是通過https ...我使用git命令行實用程序。這會如何影響我的問題? – 2014-09-06 15:04:59

+0

取決於遠程存儲庫,可能會存在郵局(推送)大小的限制。與SSH/GIT沒有限制。使用cli或gui並不重要,這一切都取決於遠程的orgin url。見http://git-scm.com/book/en/Git-on-the-Server-The-Protocols更多信息 – Rufinus 2014-09-06 23:30:13

回答

3

當您運行git add; git commit時,git將zip文件添加到本地存儲庫。即使你刪除了本地文件,git仍然在回購庫中,因爲它保留了每個提交的文件的副本。

由於您已將該文件提交到本地git倉庫,因此您需要先將其從歷史記錄中刪除,然後才能推送。爲了做到這一點,按照這個答案: https://stackoverflow.com/a/2158271/1695439

答案歸結爲運行git filter-branch,然後刪除您的原始分支。請記得用您的巨型zip文件替換文件名爲的giantfile.zip。

$ git filter-branch --index-filter 'git rm --cached -r --ignore-unmatch giantfile.zip' --prune-empty --tag-name-filter cat -- --all 
$ git update-ref -d refs/original/refs/heads/master 
$ git reflog expire --expire=now --all 
$ git gc --prune=now 
+0

嗨magikid,在每個答案下是一個共享鏈接。您可以使用它來獲取最適用於這種情況的答案的鏈接。另外,在這裏引用一些這樣的答案並不是一個壞主意,然後調整它,如果你能使它更適用於這種特定的情況。 – jmort253 2014-09-06 19:48:08

+0

謝謝你的提示!我已經更新了我的答案。 – magikid 2014-09-06 20:00:47

+0

您是否認爲在嘗試此操作前最好創建一個新分支,以防萬一出現問題?這會影響整個存儲庫還是僅影響單個分支? – jmort253 2014-09-06 20:03:40