簡體   English   中英

無法從提交中刪除文件

[英]Can't remove file from commit

上下文:我試圖從 git 中刪除一些文件,因為我在上面保存了我的機器學習 model 的檢查點,但是當我使用 optuna 進行超參數優化並通過在目錄中創建一個單獨的目錄來保存每個試驗的檢查點時每個檢查點(這是我可能會在代碼上更改的內容,因為文件太多,我只需要最好的試用)它在推送時超過了 git 限制。 檢查點文件夾的第一次出現是在 14 次提交之前,我之前已經推送過,但現在它超過了 gits 大小限制

問題:我無法從存儲庫中刪除文件。 我嘗試了以下內容:

  1.  git reset --hard @~14 git rm -r --cached path/to/checkpoints git commit --ammend git reset --hard last_commit
  2.  git reset --hard @~14 git rm -rf --cached --ignore-unmatch path/to/checkpoints git commit --ammend git reset --hard last_commit
  3.  git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path/to/checkpoints" HEAD

結果:當我執行git reset --hard @~14時,檢查點文件夾仍然存在,當我執行git push --force origin master時,它不起作用,我認為它仍然是大小限制,因為我無法刪除文件,但現在連接失敗(我已經嘗試更改 gits post 緩沖區以查看它是否解決了連接問題)

如果您需要從現有提交中刪除大文件,上面顯示的三個命令序列中唯一可以工作的是第三個命令(使用git filter-branch )。 這樣做的原因是:

git reset --hard <last-commit-hash-ID>

恢復您嘗試撤消的舊提交,因此方法 #1 和 #2 會做一些工作,然后丟棄已完成的工作,讓您回到之前的錯誤 state。

你沒有提到的是實際問題。 你說:

推送時超過git限制

我不確定這里的代詞指的是什么。 不過,Git 自己的內部限制是千兆字節(Git 的舊版本)和超過 TB(新版本),所以這不能是Git限制。 也許您指的是GitHub限制: Repository size limits for GitHub.com 或者,也許您的意思是其他限制。

值得注意的是 GitHub 至少在默認情況下永遠不會丟棄任何提交,即使是那些無法從任何引用名稱訪問的提交。 (這是因為 GitHub 將在分叉之間共享存儲。他們不跟蹤哪些分叉可能共享哪些內部 Git 對象;相反,他們假設如果某些 Git object $obj存在於您的存儲庫中,它可能正在被使用一些fork ,因此$obj永遠不會被丟棄,即使你的fork 不再使用它。理論上,GitHub 可以對共享底層存儲庫的所有 fork 運行大規模 GC 來糾正這個問題,但這可能比它節省的成本更多。)

無論如何,清理大文件的解決方案有很多,包括您提到的 filter-branch 方法,新奇的git filter-repo ,當然還有名為The BFG的舊備用方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM