我試圖將一個Git項目放在GitHub上,但其歷史記錄包含某些大文件。如果我們試圖git push
到GitHub上,我們得到了一個錯誤:刪除舊的混帳提交歷史記錄中的所有大文件的痕跡
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: File .OldFiles/blah1/[file].[ext] is 257.29 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
我們的第一個承諾(比如commit_1
)是含有被去掉幾個大文件中的一個後續提交(比如commit_2
)而無需重寫git的提交歷史。
我們正在使用AFS File System
(可能是一個額外的信息),所有舊的大文件都存儲在.OldFiles
目錄中的特定位置。 在commit_2
中,我們刪除了.OldFiles
及其內容,並且還將blah1
目錄添加到.gitignore
,但這並未在Git中刪除其歷史記錄。 不幸的是,我們需要在commit_1
之後& commit_2
保持完整的幾個其他提交(字面上n提交數!!)。
我已經從爲commit_1
創建重複分支在當地沙箱中的克隆試驗:
git checkout -b fix_branch <commit_1_sha_id>
研究發現,fix_branch
仍含有大量文件:.OldFiles/blah1/[file].[ext]
。
也許我們需要刪除這些大文件OldFiles
&它是相應的提交歷史來做一個成功的GitHub推送。
嘗試this但我們在git rebase
得到一個錯誤:
error: unrecognised input
error: could not build fake ancestor
還試圖this但失敗:
git filter-branch --force --index-filter \ 'git rm --cached --ignore-unmatch [project]/.OldFiles/blah1/[file].[ext]' \ --prune-empty --tag-name-filter cat -- --all
我不知道我們是否可以使用git cherry-pick,我們可以不要丟棄commit_1
中的所有文件,只能刪除這些大文件。
是否可以通過重寫git歷史記錄並通過使用git filter-branch
和git rebase -i
來編輯提交來刪除所有大文件痕跡?
P.S.我們的項目空間中沒有安裝lfs
或bfg
。
一個li'l的幫助將非常感謝這個新手! :)
如果分支的佈局幾乎是線性的,我會回到第一個提交,刪除文件,修改它,並櫻桃選擇這個分支上的任何東西。如果佈局更復雜,那麼我認爲你必須使用filter-branch來糾正它。 – eftshift0
這看起來像http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from-commit-history-in-git-repository和朋友的副本。 「過濾器分支」操作以何種方式失敗? – larsks
@Edmundo,我不確定'cherry-pick'如何幫助我們。我們已經在'commit_1'之後做了幾次提交,特別是'commit_1',我們只需要放棄大文件並保持其他文件不變。 –