1

我試圖將一個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-branchgit rebase -i來編輯提交來刪除所有大文件痕跡?

P.S.我們的項目空間中沒有安裝lfsbfg

一個li'l的幫助將非常感謝這個新手! :)

+0

如果分支的佈局幾乎是線性的,我會回到第一個提交,刪除文件,修改它,並櫻桃選擇這個分支上的任何東西。如果佈局更復雜,那麼我認爲你必須使用filter-branch來糾正它。 – eftshift0

+1

這看起來像http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from-commit-history-in-git-repository和朋友的副本。 「過濾器分支」操作以何種方式失敗? – larsks

+0

@Edmundo,我不確定'cherry-pick'如何幫助我們。我們已經在'commit_1'之後做了幾次提交,特別是'commit_1',我們只需要放棄大文件並保持其他文件不變。 –

回答

1

BFG是真正爲這種情況設計的。我確實讀過「P.S.我們沒有在我們的項目空間安裝lfs或bfg」。你的問題的一部分,但這仍然留給你兩種可能性:

  • 安裝BFG。如果您的計算機上安裝了Java,則只需要下載一個.jar文件。

  • 使用另一臺機器。使用BFG是一次性操作,您不需要將它安裝在常用機器上,只需訪問可以運行BFG一次的計算機,執行過濾並隨處使用所生成的回購。

+0

它的工作! :D Tnx! –

相關問題