通过删除旧提交紧凑的回购

Eug*_*kov 8 git

有没有办法通过删除有关旧提交的数据的本地副本来减少repo大小?

类似于如何git clone --depth 5生成仅具有最近提交数据的小型本地克隆.

回购包含数十亿字节的游戏资产,过去曾多次被覆盖.

编辑:我不想只是清除过去的历史; 我希望历史记录与远程程序保持一致,但我不希望旧的提交在本地存储和可用.

mvp*_*mvp 7

遗憾的是,不可能只保留历史上最新的提交并且具有完全可用的存储库.浅拷贝不是完全可用的,因为它不能被提交.

换句话说,由于git将数据保存在对象存储库中的方式,除了从头开始重写历史记录之外,您没有很多选项.

可能最简单的方法是将所有当前游戏资产文件的副本复制到git存储库之外的某个位置,然后git filter-branch按照此处所述使用从历史记录中删除资产,就像它从未存在过一样.最后,将资产复制回正确的位置并再次提交.这将以游戏资产仅出现在最近提交中的方式重写您的历史记录.

但是,它仍然不会回收磁盘空间,直到你执行:

git reflog expire --expire=now --all
git gc --prune=now
Run Code Online (Sandbox Code Playgroud)