有没有办法通过删除有关旧提交的本地数据副本来减少回购协议的大小?
类似于git clone --depth 5
如何生成只有最近提交数据的小型本地克隆。
回购包含数十亿字节的游戏资产,过去曾多次被覆盖。
编辑:我不想只是清除过去的历史;我希望历史记录与远程保持一致,但我不希望旧提交在本地存储和可用。
答案 0 :(得分:7)
不幸的是,不可能仅保留历史记录中的最新提交,并且完全可用存储库。浅拷贝不能完全使用,因为它不能被提交。
换句话说,由于git将数据保存在对象存储库中的方式,除了从头开始重写历史记录之外,您没有很多选项。
可能最简单的方法是将所有当前游戏资产文件的副本复制到git存储库之外的某个位置,然后使用git filter-branch
作为described here从历史记录中删除您的资产,就像它从未存在过一样。最后,将资产复制回正确的位置并再次提交。这将以游戏资产仅出现在最近的提交中的方式重写您的历史记录。
但是,它仍然不会回收磁盘空间,直到你执行:
git reflog expire --expire=now --all
git gc --prune=now
答案 1 :(得分:3)
git gc --prune=<date>
应该做你想做的事。请查看文档:{{3}}
更新1:我建议您阅读有关git gc
的博文:https://www.kernel.org/pub/software/scm/git/docs/git-gc.html
Update2: @mvp是正确的,经过深入研究git gc
只会删除未跟踪的对象。为了删除对象,解决方案之一是使用git filter-branch
。我建议您阅读有关http://gitfu.wordpress.com/2008/04/02/git-gc-cleaning-up-after-yourself/和removing objects文档的此主题。感谢@mvp的抬头。