有沒有辦法通過刪除有關舊提交的數據的本地副本來減少回購大小?通過刪除舊提交的緊湊回購
與git clone --depth 5
產生一個只有最近提交數據的小本地克隆類似。
回購包含千兆字節的遊戲資產,這些資產在過去被多次覆蓋。
編輯:我不想清除過去的歷史;我希望歷史與遠程保持一致,但我不希望舊提交在本地存儲並可用。
有沒有辦法通過刪除有關舊提交的數據的本地副本來減少回購大小?通過刪除舊提交的緊湊回購
與git clone --depth 5
產生一個只有最近提交數據的小本地克隆類似。
回購包含千兆字節的遊戲資產,這些資產在過去被多次覆蓋。
編輯:我不想清除過去的歷史;我希望歷史與遠程保持一致,但我不希望舊提交在本地存儲並可用。
不幸的是,不可能只保留最近提交的歷史記錄,並且完全可用存儲庫。淺拷貝不完全可用,因爲它不能被承諾。
換句話說,由於git將數據保存在對象存儲中的方式,除了從頭開始重寫歷史記錄之外,沒有多少選項。
可能最簡單的方法是將所有當前遊戲資產文件複製到git存儲庫之外的某個位置,然後使用git filter-branch
作爲described here從歷史記錄中刪除您的資產,就像它從未存在過。最後,將資產複製回合適的位置並再次提交。這將以遊戲資產只出現在最近的提交中的方式重寫您的歷史記錄。
但是,它仍然不會回收磁盤空間雖然直到你:
git reflog expire --expire=now --all
git gc --prune=now
git gc --prune=<date>
應該做你想做的。看看到文檔:https://www.kernel.org/pub/software/scm/git/docs/git-gc.html
UPDATE1:我建議你閱讀這篇博客文章git gc
還有:http://gitfu.wordpress.com/2008/04/02/git-gc-cleaning-up-after-yourself/
UPDATE2: @mvp是正確的,進行了深入研究後git gc
只會移除未跟蹤的對象。爲了移除物體,其中一個解決方案是使用git filter-branch
。我建議您閱讀關於removing objects和git filter-branch文檔的主題。感謝@mvp的領導。
你是完全錯誤的。 'git gc --prune'不會做OP想要的 – mvp
你是對的@mvp,我已經更新了我的答案。擡起頭來。 –
@danielcsgomes對於它的價值,如果原始海報**對刪除懸掛提交感興趣,那麼'git gc'確實是正確的使用工具。 – 2013-05-31 13:58:23
當你說「老提交」,我猜你的意思不是晃來晃去不再從到達提交分支指針,在你的歷史中只是真的很老,你不可能在不久的將來再次訪問,那會是正確的嗎? – 2013-05-31 13:56:44
@TheShadow的權利,我會更新問題 –
@Hardex:回答您的更新問題:不可能保留歷史上最近的提交,並有完全可用的存儲庫。淺拷貝不完全可用 - 它不能被提交。 – mvp